Category / Section
How to add summary row in grid databound grid?
1 min read
The GridDataBoundGrid doesn’t have support for Summary row. This can be achieved by using GridSummaryRow class. And wire the griddataboundgrid to Summary Row.
C#
//create a summary row... sumRow = new GridSummaryRow(); //define the summary type for each column object[] summaryTypes = new object[this.gridDataBoundGrid1.Model.ColCount]; for (int i = 0; i < this.gridDataBoundGrid1.Model.ColCount; i++) { if (i == 2 || i == 3 || i == 5) //sum these { summaryTypes[i] = GridSummaryRow.SummaryType.Sum; } else if (i == 6) //do max { summaryTypes[i] = new GridSummaryRow.CustomSummaryCalculation(calc_Max); } else if (i == 7) //do min { summaryTypes[i] = new GridSummaryRow.CustomSummaryCalculation(calc_Min); } else //no summary { summaryTypes[i] = GridSummaryRow.SummaryType.None; } } this.gridDataBoundGrid1.Binder.InternalColumns(0).StyleInfo.BackColor = SystemColors.Control; this.gridDataBoundGrid1.Binder.InternalColumns(2).StyleInfo.BackColor = SystemColors.Control; this.gridDataBoundGrid1.Binder.InternalColumns(5).StyleInfo.BackColor = SystemColors.Control; //two ways to wire the summary row //1) use default table style //sumRow.WireSummaryRow(this.gridDataBoundGrid1, summaryTypes); //2) or set each column style somehow.... GridStyleInfo[] styles = new GridStyleInfo[this.gridDataBoundGrid1.Model.ColCount]; for (int i = 0; i < this.gridDataBoundGrid1.Model.ColCount; i++) { styles[i] = new GridStyleInfo((GridStyleInfoStore)(this.gridDataBoundGrid1.Binder.InternalColumns(i).StyleInfo.Store.Clone())); styles[i].Font.Bold = true; } styles[0].Text = "Total"; sumRow.WireSummaryRow(this.gridDataBoundGrid1, summaryTypes, styles);
VB
'create a summary row... sumRow = New GridSummaryRow() 'define the summary type for each column Dim summaryTypes(Me.gridDataBoundGrid1.Model.ColCount - 1) As Object For i As Integer = 0 To Me.gridDataBoundGrid1.Model.ColCount - 1 If i= 2 OrElse i = 3 OrElse i = 5 Then 'sum these summaryTypes(i) = GridSummaryRow.SummaryType.Sum ElseIf i = 6 Then 'do max summaryTypes(i) = New GridSummaryRow.CustomSummaryCalculation(AddressOf calc_Max) ElseIf i = 7 Then 'do min summaryTypes(i) = New GridSummaryRow.CustomSummaryCalculation(AddressOf calc_Min) Else 'no summary summaryTypes(i) = GridSummaryRow.SummaryType.None End If Next i Me.gridDataBoundGrid1.Binder.InternalColumns(0).StyleInfo.BackColor = SystemColors.Control Me.gridDataBoundGrid1.Binder.InternalColumns(2).StyleInfo.BackColor = SystemColors.Control Me.gridDataBoundGrid1.Binder.InternalColumns(5).StyleInfo.BackColor = SystemColors.Control 'two ways to wire the summary row 1) use default table style 'sumRow.WireSummaryRow(this.gridDataBoundGrid1, summaryTypes); '2) or set each column style somehow.... Dim styles(Me.gridDataBoundGrid1.Model.ColCount - 1) As GridStyleInfo For i As Integer = 0 To Me.gridDataBoundGrid1.Model.ColCount - 1 styles(i) = New GridStyleInfo(CType(Me.gridDataBoundGrid1.Binder.InternalColumns(i).StyleInfo.Store.Clone(), GridStyleInfoStore)) styles(i).Font.Bold = True Next i styles(0).Text = "Total" sumRow.WireSummaryRow(Me.gridDataBoundGrid1, summaryTypes, styles) 'this.gridDataBoundGrid1.EnableAddNew = false; 'padd the grid's client area with empty rows Me.gridDataBoundGrid1.Model.Options.DisplayEmptyRows = True
Screenshot
Sample Links
C#: AddSummary_CS
VB: AddSummary_VB