在最后一次调用RowDataBound

时间:2017-02-02 07:43:56

标签: c# asp.net gridview

我正在开展一个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的最后一次调用?

2 个答案:

答案 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。如果不是,您需要将其存储在类级别变量或会话中。