我正在开展一个Web Forms
项目。它是一个旧的,在这个时候添加了大量的抽象。在我的一个页面上,我有一个带分页的gridview。我试图扩展当前的实现,检查当用户进入下一个时当前gridview页面上是否有更改。我想我设法通过使用两个会话变量来做到这一点。我的问题是其中一个填充在RowDataBound
事件上,并且因为在原始ASP.NET
会话之上有一些抽象,我RowDataBound
事件中的代码如下所示:
SessionWrapper.GetInstance().RemoveSessionItem("OriginalData");
SessionWrapper.GetInstance().SetSessionItem("OriginalData", someData);
这是在RowDataBound
实现的最后调用的,例如在我的情况下,gridview每页显示10条记录,所以我删除了10次密钥,之后我将其添加了更新的数据,其中someData
是每个RowDataBound
调用附加的每个记录的集合。
我想要做的是找到一种方法,即RowDataBound
的最后一次执行,并且仅执行上述步骤一次。因为我知道每页有10页我可以补充一个计数器并检查它,但那么如果在最后一页我有少于10个记录,或者总记录少于10?
那么有没有办法可靠地检查何时是RowDataBound
的最后一次调用?
答案 0 :(得分:3)
如果您使用RowDataBound
页脚行,那么您将知道有多少行。
int counter = 0;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
counter = 0;
}
else if (e.Row.RowType == DataControlRowType.DataRow)
{
counter++;
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
Label1.Text = counter + " rows in GridView";
}
}
答案 1 :(得分:3)
我建议使用DataBound
来更新Session
。像这样:
protected void GridView_DataBound(object sender, EventArgs e)
{
SessionWrapper.GetInstance().RemoveSessionItem("OriginalData");
SessionWrapper.GetInstance().SetSessionItem("OriginalData", someData);
}
这假定在此方法的范围内可以访问someData
。如果不是,您需要将其存储在类级别变量或会话中。