.NET开发中我们最常用到的一个数据控件就是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作为数据源的话,可以通过在SqlDataSource的Selected事件中编写如下的代码即可获得总记录数量:
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;
GridView的数据源中提取出对应查询语句,然后根据此查询语句来构建一个查询总记录的SQL语句即可