/// <summary> /// the fill grid method fills the grid with the data from the DataSourceManager /// It takes the grouping style into account, if it is set. /// </summary> private void FillGrid(IOutlookGridGroup groupingStyle) { ArrayList list; OutlookGridRow row; this.Rows.Clear(); // start filling the grid if (dataSource == null) { return; } else { list = dataSource.Rows; } if (list.Count <= 0) { return; } // this block is used of grouping is turned off // this will simply list all attributes of each object in the list if (groupingStyle == null) { foreach (DataSourceRow r in list) { row = (OutlookGridRow)this.RowTemplate.Clone(); foreach (object val in r) { DataGridViewCell cell = new DataGridViewTextBoxCell(); cell.Value = val.ToString(); row.Cells.Add(cell); } Rows.Add(row); } } // this block is used when grouping is used // items in the list must be sorted, and then they will automatically be grouped else { IOutlookGridGroup groupCur = null; object result = null; int counter = 0; // counts number of items in the group foreach (DataSourceRow r in list) { row = (OutlookGridRow)this.RowTemplate.Clone(); result = r[groupingStyle.Column.Index]; if (groupCur != null && groupCur.CompareTo(result) == 0) // item is part of the group { row.Group = groupCur; counter++; } else // item is not part of the group, so create new group { if (groupCur != null) { groupCur.ItemCount = counter; } groupCur = (IOutlookGridGroup)groupingStyle.Clone(); // init groupCur.Value = result; row.Group = groupCur; row.IsGroupRow = true; row.Height = groupCur.Height; row.CreateCells(this, groupCur.Value); Rows.Add(row); // add content row after this row = (OutlookGridRow)this.RowTemplate.Clone(); row.Group = groupCur; counter = 1; // reset counter for next group } foreach (object obj in r) { DataGridViewCell cell = new DataGridViewTextBoxCell(); cell.Value = obj.ToString(); row.Cells.Add(cell); } Rows.Add(row); groupCur.ItemCount = counter; } } }