在ASP.NET GridView控件中维护行选择

时间:2012-02-01 13:49:28

标签: asp.net ajax gridview postback

设置: 我目前在更新面板内部有一个带有GridView控件的页面,使用SqlDataSource。我有一个计时器设置来每隔X秒更新GridView。通常我每次测试GridView时都会测试4-5个新行数据被添加到gridview,而最后4-5个被抛出。我一次只显示15个结果,每次更新都会有新结果。

问题: 我允许用户选择行,同时更新GridView。我通过设置SelectedIndex属性来处理这个问题。但是,当我选择一行然后更新网格时,用户选择的行将被推下约4-5行,而选择前一个选定索引中的数据。因此,此时选择了他们点击的位置,而不是他们点击的内容。

我需要一种方法来确定,如果可能的话,从SqlDataSource / Gridview中,有多少新行被添加到gridview中。或者通过行中的数据维护所选数据的方法,而不仅仅是SelectedIndex。

感谢任何帮助,谢谢。

解决: 好的我继续向我的网格添加了一个新的不可见列,现在我跟踪从数据库中选择的唯一ID。通过在数据绑定之前设置一个数组,并将其与数据绑定后得到的新数组进行比较,我可以使用简单的Intersect来确定相同的行数。然后我用它来确定这个回发的总数是多少。

2 个答案:

答案 0 :(得分:1)

只是一个想法:

我认为您可以使用不可见的列(更具体地说是ID列)将所选行的IDs值存储在Session对象中,然后在网格更新后,如果它们仍然存在,则可以检索此值并再次选择行。

答案 1 :(得分:0)

如果您有自定义GridView OnRowUpdating事件。

public void GridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    Session["CurrIndex"] = GridView.SelectedIndex;//index before insertion
    Session["RowCount"] = GridView.Rows.Count;//row count before insertion
    //Add new Rows
    GridView.SelectedIndex = (Int32)(Session["CurrIndex"]) + ( GridView.Rows.Count - (Int32)(Session["RowCount"]);//update selected index
    Session["CurrIndex"] = GridView.SelectedIndex;//restore the index into session
}