Sunday, February 27, 2011

ASP.NET - ColumnSpan Attribute of Footer Row in GridView

This article attempts to provide tutorial on how to get the footer of a GridView to be displayed as a SINGLE cell i.e. setting the ColumnSpan property to match the number of columns. The trick is to use the OnRowCreated method.

Design code
<asp:GridView ID="gvResults" ShowHeader="true" ShowFooter="true" runat="server" OnRowCreated="gvResults_RowCreated" ....>
...
    <Columns>
...
    <asp:TemplateField ...>
        <ItemTemplate>
...
        </ItemTemplate>
        <FooterTemplate>
        </FooterTemplate>
    </asp:TemplateField>
    </Columns>
</asp:GridView>

Code-behind code (VB.NET)
Protected Sub gvResults_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvResults.RowCreated
    If e.Row.RowType = DataControlRowType.Footer Then
        Dim m As Integer = e.Row.Cells.Count
        For i As Integer = m - 1 To 1 Step -1
            e.Row.Cells.RemoveAt(i)
        Next

        e.Row.Cells(0).ColumnSpan = m

        Try
            Dim dv As DataView = gvResults.DataSource
            If dv.Count = 0 Then
                e.Row.Cells(0).Text = "0 records"
            Else
                Dim startRec As Integer = (gvResults.PageIndex * gvResults.PageSize) + 1
                Dim endRec As Integer = startRec + gvResults.Rows.Count - 1
                e.Row.Cells(0).Text = startRec & "-" & endRec & " of " & dv.Count & " records"
            End If
        Catch ex As Exception
        End Try
    End If
End Sub

Code-behind code (C#)
protected void gvResults_RowCreated(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Footer)
    {
        int m = e.Row.Cells.Count;

        for (int i = m - 1; i >= 1; i--)
        {
            e.Row.Cells.RemoveAt(i);
        }

        e.Row.Cells[0].ColumnSpan = m;

        try
        {
            DataView dv = gvResults.DataSource;
            if (dv.Count == 0)
                e.Row.Cells[0].Text = "0 records";
            else
            {
                int startRec = (gvResults.PageIndex * gvResults.PageSize) + 1;
                int endRec = startRec + gvResults.Rows.Count - 1;
                e.Row.Cells[0].Text = startRec.ToString() + "-" + endRec.ToString() + " of " + dv.Count.ToString() + " records";
            }
        }
        catch (Exception ex) { }
    }
}

1 comment:

  1. Thank you for the information. I thing all new .Net programmer are benefited with this information.

    ReplyDelete

Do provide your constructive comment. I appreciate that.