Hi Ronen,
you can handle the TableModel.QueryCoveredRange and TableControlPrepareViewStyleInfo event.
Example:
private void groupingGrid1_TableControlPrepareViewStyleInfo(object sender, GridTableControlPrepareViewStyleInfoEventArgs e)
{
GridTableCellStyleInfo style = (GridTableCellStyleInfo) e.Inner.Style;
RecordRow recordRow = style.TableCellIdentity.DisplayElement as RecordRow;
if (recordRow != null)
{
Record r = style.TableCellIdentity.DisplayElement.ParentRecord;
//int recordIndex = r.ParentTable.Records.IndexOf(r);
int rowInRecordIndex = r.RecordRows.IndexOf(recordRow);
GridColumnDescriptor column = style.TableCellIdentity.Column;
if (column != null)
{
switch (column.Name)
{
case "CompanyName":
{
e.Inner.Style.Interior = new Syncfusion.Drawing.BrushInfo(Syncfusion.Drawing.GradientStyle.Vertical, Color.White, Color.Orange);
e.Inner.Style.Text = rowInRecordIndex.ToString();
break;
}
case "ContactName":
{
e.Inner.Style.Interior = new Syncfusion.Drawing.BrushInfo(Syncfusion.Drawing.GradientStyle.Vertical, Color.White, Color.Orange);
break;
}
}
}
}
}
private void TableModel_QueryCoveredRange(object sender, GridQueryCoveredRangeEventArgs e)
{
GridTableModel model = (GridTableModel) sender;
GridTable thisTable = model.Table;
if (e.RowIndex < thisTable.DisplayElements.Count)
{
Element el = thisTable.DisplayElements[e.RowIndex];
if (el is RecordRow && el.ParentGroup != null)
{
GridTableCellStyleInfo style = model[e.RowIndex, e.ColIndex];
if (style.TableCellIdentity.Column != null
&& style.TableCellIdentity.Column.Name == "CompanyName")
{
Group group = el.ParentGroup;
if (group != null && !group.IsTopLevelGroup)
{
int tablePos = thisTable.DisplayElements.IndexOf(group);
int firstRow = tablePos+1;
int lastRow = tablePos+group.GetVisibleCount()-1;
e.Range = GridRangeInfo.Cells(firstRow, e.ColIndex, lastRow, e.ColIndex);
e.Handled = true;
}
}
}
}
}
private void TableModel_QueryBanneredRange(object sender, GridQueryBanneredRangeEventArgs e)
{
GridTableModel model = (GridTableModel) sender;
GridTable thisTable = model.Table;
if (e.RowIndex < thisTable.DisplayElements.Count)
{
Element el = thisTable.DisplayElements[e.RowIndex];
if (el is RecordRow && el.ParentGroup != null)
{
GridTableCellStyleInfo style = model[e.RowIndex, e.ColIndex];
if (style.TableCellIdentity.Column != null
&& style.TableCellIdentity.Column.Name == "ContactName")
{
Group group = el.ParentGroup;
if (group != null && !group.IsTopLevelGroup)
{
int tablePos = thisTable.DisplayElements.IndexOf(group);
int firstRow = tablePos+1;
int lastRow = tablePos+group.GetVisibleCount()-1;
e.Range = GridRangeInfo.Cells(firstRow, e.ColIndex, lastRow, e.ColIndex);
e.Handled = true;
}
}
}
}
}
I attached a modified GroupCustomers project. Make sure the xml file can be found that is loaded in the form ctor.
Stefan
GroupCustomers_Covered_and_Bannered_Ranges_5304.zip