VS2010 GridView分页实现与解决常见问题

4星 · 超过85%的资源 需积分: 15 17 下载量 113 浏览量 更新于2024-09-16 2 收藏 94KB DOC 举报
在Visual Studio 2010中,利用自带的分页功能可以帮助我们构建高效的数据管理系统,如一个简单的签到系统。本文将详细介绍如何在VS2010中实现分页功能以及遇到的问题及其解决方案。 首先,为了在GridView中启用分页,我们需要在设计阶段设置Gridvie的属性。在GridView控件上,找到并打开其属性窗口,确保"AutoGeneratePages"属性被勾选,这会自动为数据源生成分页控件。如图1-1所示,界面已预设了分页,每一页显示一定数量的记录。 接着,在GridView的事件处理中,关注"PageIndexChanging"事件,这是用户翻页时触发的事件。在事件处理方法`protected void gvAttend_PageIndexChanging(object sender, GridViewPageEventArgs e)`中,设置新的页码并调用数据绑定函数`Dbing()`。该方法负责根据用户选择的页码重新加载数据集。 `Dbing()`方法中的代码如下: ```csharp int temp = 0; string cardid = CardId; DataSet ds = _AttendInfoBLL.GetAttendInfo(cardid); if (ds != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { if (ds.Tables[0].Rows[i]["AttendTime"].ToString().IndexOf("迟到") > 0) { temp++; } } Session["count"] = temp; gvAttend.DataSource = ds; gvAttend.DataBind(); } ``` 这个部分计算迟到的记录数量,并根据计数重新绑定数据。 然而,当用户翻到第二页并点击“填写原因”(通过`RowCommand`事件)时,可能会出现下标越界错误。这是因为`RowCommand`事件是在单个记录级别触发的,而不是在页级别。为解决这个问题,我们需要在`RowCommand`事件中进一步处理,确保正确获取当前页的数据范围。 在`protected void gvAttend_RowCommand(object sender, GridViewCommandEventArgs e)`中,添加对`CommandName`的检查,仅在用户点击的是“btnFill”按钮时执行以下逻辑: ```csharp if (e.CommandName == "btnFill") { int iPageIndex = gvAttend.PageIndex; // 获取当前页的索引 int iPageSize = gvAttend.PageSize; int startIndex = (iPageIndex - 1) * iPageSize; // 计算起始行号 int endIndex = startIndex + iPageSize; // 计算结束行号 if (startIndex <= ds.Tables[0].Rows.Count) { DataView dv = new DataView(ds.Tables[0]); dv.RowFilter = string.Format("ROW_NUMBER() OVER (ORDER BY AttendTime) BETWEEN {0} AND {1}", startIndex + 1, endIndex); gvAttend.DataSource = dv; gvAttend.DataBind(); } } ``` 这样,通过在`RowCommand`事件中应用数据视图(DataView)和行过滤(RowFilter),我们可以确保在分页操作下正确地访问和显示数据,避免了下标越界的问题。通过这些步骤,您可以在VS2010中成功实现Gridvie的分页功能,提供良好的用户体验。