.NET 中获取GridView的总记录数

.NET开发中我们最常用到的一个数据控件就是GridView了,官方赋予了他很多很多的功能,让我们针对数据进行列表显示及处理轻而易举,但是也会遇到官方没有给定的一些功能,需要我们自己动脑去思考实现

jesen
1
2020-04-16 23:06:14
文档目录
我的书签
 

怎么获取GridView的总记录数 取得绑定记录的总数量

<asp:GridView>数据控件中提供了针对它的数据分页功能,但很遗憾的是在分页功能中没有显示总数量,这使得我们需要自己实现获取它的总数量,如果使用它内部的属性来获取,比如:GridView.Rows.Count获取的只是当前页的记录数,所以只能通过我们自己来解决了。
我们来思考一下,如果要获得它的总记录数量可以使用的方法都有那些?首先想到的当然是自己查询数据库了,其次就是使用它自身存在的一些属性或者和其关联的一些控件来推算它的总记录数量。

一、根据已有数据进行推算

可以使用 GridView.PageSize * GridView.PageCount来推算,但是如果最后一页的记录数不是 GridView.PageSize条的话(相信自己写过分页算法的人都能理解,最后一页可能只有1条数据或者几条数据的可能),获取的总记录数就不准确,需要我们针对最后一页做特殊处理,代码如下:
string totalRecord = "0"; // 如果无记录,默认显示0 
if(GridViewContainer.PageCount > 0)     //  如果页数大于0   
{
    GridViewContainer.PageIndex = GridViewContainer.PageCount - 1;   //  将当前显示页的索引转到最后一页    
    GridViewContainer.DataBind();         //重新绑定数据,这行代码十分重要,这样才能到达最后一页   
    int lastSize = GridViewContainer.Rows.Count;           // 然后获得最后一页的行数   
    if(GridViewContainer.PageCount > 1)     //如果页数大于1页,则计算出   
    {
        //  总行数=(总页数-1)* 每页行数 +  最后一页的行数                                   
        int rowsCount = GridViewContainer.PageSize * (GridViewContainer.PageCount - 1) + lastSize;
        totalRecord = rowsCount.ToString(); 
    }
    else
    {
        totalRecord = lastSize.ToString();   //如果页数只有一页,则直接将该页的行数赋给Label   
    }
    GridViewContainer.PageIndex = 0;
}
​​​​​

二、通过数据源控件的事件

如果GridView中使用SqlDataSource作为数据源的话,可以通过在SqlDataSourceSelected事件中编写如下的代码即可获得总记录数量:
protected void SqlDataSourceID_Selected(object sender, SqlDataSourceStatusEventArgs e)   
{   
   string totalRecord = e.AffectedRows.ToString();   //e.AffectedRows获取的就是总记录数   
}  
 

三、通过数据源

因为GridView的数据源对象中保存的数据就是所有的记录数量,那么我们可以直接获取它的数据源对象就可以得到了,代码如下:
DataSet ds = (DataSet)GridView1.DataSource; 
int rowCount = ds.Tables[0].Rows.Count;
 

四、通过SQL查询

这种方式就很简单了,只需要在GridView的数据源中提取出对应查询语句,然后根据此查询语句来构建一个查询总记录的SQL语句即可
友情提示