【问题标题】:Maintaining Row Selection in ASP.NET GridView Control在 ASP.NET GridView 控件中维护行选择
【发布时间】:2012-02-01 13:49:27
【问题描述】:

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

问题: 我允许用户在更新 GridView 时选择行。我通过设置 SelectedIndex 属性来处理这个问题。但是,当我选择一行然后更新网格时,用户选择的行被向下推了大约 4-5 行,而是选择了先前选择的索引中的数据。所以此时选择的是他们点击的地方,而不是他们点击的地方。

如果可能的话,我需要一种方法来确定向网格视图添加了多少新行。或者一种通过行中的数据来维护所选数据的方法,而不仅仅是 SelectedIndex。

感谢您的帮助。

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

【问题讨论】:

    标签: asp.net ajax gridview postback


    【解决方案1】:

    只是一个想法:

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

    【讨论】:

    • 嗯..我明白了。是的,这会起作用,但在我的场景中,它似乎需要大量处理。另外我想知道是否有一种方法可以确定有多少行数据绑定是新的,这可能会有很大帮助,因为这样我就不必再次搜索所有行来查找可能存在或不存在的 ID。
    • 您希望网格中有多少行?我认为这不需要大量处理......它们只是数字,搜索会运行得非常快。
    • 好的,我继续在我的网格中添加了一个新的不可见列,现在我正在跟踪从数据库中选择的唯一 ID。通过在数据绑定之前设置一个数组,并将其与数据绑定后得到的新数组进行比较,我能够使用一个简单的 Intersect 来确定相同的行数。然后我用它来确定这个回发的总数有多少是新的。
    • 就是这样。这个问题的一个很好的解决方案。我在大约 2 年前做过这样的事情,只是为了记录。 :)
    【解决方案2】:

    如果您有自定义 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
    }  
    

    【讨论】:

    • 感谢您的建议。我现在正在做类似的事情,但请注意,此事件发生在用户更新行时,而不是在数据绑定/添加行时。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    相关资源
    最近更新 更多