GridView - Pagination - Total Record Count

I am databinding a GridView to a DataTable, via an ObjectDataSource.  I have enabled pagination and would like to display pagination data on the GUI as follows:

Displaying [Index of 1st Record on GridView.Page] - [Index of last Record on GridView.Page] of [GridView's total record count] records.

I can calculate the Index of the 1st record:
((this.GridView1.PageIndex + 1) * this.GridView1.PageSize) - (this.GridView1.PageSize - 1);

I can calcualte the Index of the Last Record displayed on the current Page:
((this.GridView1.PageIndex + 1) * this.GridView1.PageSize);

How can I calculate the total record count?

Thanks,

PJ
LVL 8
ppittleAsked:
Who is Participating?
 
Christian de BellefeuilleConnect With a Mentor ProgrammerCommented:
You can change the code behind with what's bellow.  It work
Public Partial Class GridView
    Inherits System.Web.UI.Page
 
    Private RecordsCount As Long
 
 
    Private Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.DataBound
        CType(GridView1.FooterRow.FindControl("Label1"), Label).Text = RecordsCount
    End Sub
 
 
    Private Sub ds1_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles ds1.Selected
        RecordsCount = e.AffectedRows
    End Sub
End Class

Open in new window

0
 
urir10Connect With a Mentor Commented:
Can you use the dataTable?

string totalNumberOfRows = DataTable.Rows.Count.ToString();

Should give you the total number of rows.
0
 
Christian de BellefeuilleProgrammerCommented:
here's what you asked...
--- Code behind file ---
Public Partial Class GridView
    Inherits System.Web.UI.Page
 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 
    End Sub
 
    Private Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.DataBound
        CType(GridView1.FooterRow.FindControl("Label1"), Label).Text = GridView1.Rows.Count
 
    End Sub
End Class
 
--- Aspx file ---
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="GridView.aspx.vb" Inherits="Test_ASP.NET_App.GridView" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server"  DataSourceID="ds1" ShowFooter="True">
        <Columns>
            <asp:TemplateField>
                <FooterTemplate>
                    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                </FooterTemplate>
            </asp:TemplateField>
        </Columns>
        
        </asp:GridView> 
    
        <asp:SqlDataSource ID="ds1" runat="server" ConnectionString="<%$ ConnectionStrings:csMyConnection%>"
                 SelectCommand="SELECT * FROM tblTest">
        </asp:SqlDataSource>    
    </div>
    </form>
</body>
</html>

Open in new window

0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
urir10Connect With a Mentor Commented:
Wouldnt that give the number of rows of the current page of the gridview?
0
 
Christian de BellefeuilleProgrammerCommented:
yeah, sorry, i've just added the pagination and noticed that it's only rows on the actual page.
0
 
ppittleAuthor Commented:
Thanks for all the feed back!  After reviewing your comments and tinkering a bit I came up with this, which works:

protected void AllStoriesGridView_DataBound(object sender, EventArgs e)
        {    
            PaginationRecordCountLabel.Visible = (AllStoriesGridView.Rows.Count > 0);

            string recordCountFormatString = "Displaying records {0}-{1} out of {2}.";

            ObjectDataSource ods = (ObjectDataSource)AllStoriesGridView.DataSourceObject;
            int totalRowsInDataSource = (ods.Select() as DataView).Count;

            int firstRecordOnPageIndex = ((AllStoriesGridView.PageIndex + 1) * AllStoriesGridView.PageSize) - AllStoriesGridView.PageSize + 1;
            int lastRecordOnPageIndex;

            if (((AllStoriesGridView.PageIndex + 1) * AllStoriesGridView.PageSize) > totalRowsInDataSource)
            {
                lastRecordOnPageIndex = totalRowsInDataSource;
            }
            else
            {
                lastRecordOnPageIndex = ((AllStoriesGridView.PageIndex + 1) * AllStoriesGridView.PageSize);
            }            

            PaginationRecordCountLabel.Text = string.Format(recordCountFormatString,
                firstRecordOnPageIndex,
                lastRecordOnPageIndex,
                totalRowsInDataSource);
}


cdebel and urir10 I tried this out too:

 protected void AllStoriesDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e)
        {
            int totalRowsInDataSource = (e.ReturnValue as DataTable).Rows.Count;
        }

Which is similiar to what the two of you suggested.  However, this doesn't take into account any filtering done on the ObjectDataSource, which, granted, wasn't part of my original problem description.  It does, however, return the number of rows being returned from the DB.

I also looked at e.AffectedRows (where e is ObjectDataSourceStatusEventArgs), and it always returned -1 for some reason.  Might be some odd difference between ObjectDataSources and SqlDataSources.  

Regardless, thank you both for the assistance.

PJ
0
 
ppittleAuthor Commented:
Note:  I posted the solution that worked in my case (ObjectDataSources).  cdebel and urir10's comment's are only marked as solution in order to award points for their assistance.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.