当排序gridview时,所选行突出显示不移动

时间:2010-11-05 18:59:40

标签: c# asp.net gridview

我在webform上有一个ASP.net gridview,用户可以选择一行。当他们选择它时,该行突出显示为黄色。问题是,当我对表进行排序时,它会正确排序,但突出显示保持在同一行。数据全部移动,但重点仍然存在。

任何人都可以建议我如何使重点与数据保持一致吗?

3 个答案:

答案 0 :(得分:1)

在排序之前抓取SelectedDataKey.Value(OnSorting?)。 然后在排序(OnSorted?)之后,使用类似的东西:

foreach(var row in GridView1.Rows)
{
   var i = Convert.ToInt32(ViewState["MySavedSelectedDataKey"]));
   if(GridView1.DataKeys[row.RowIndex].Value == i)
   {
       GridView1.SelectedIndex = row.RowIndex;
       break;
   }
}

您可能需要再次调用DataBind()以显示新的SelectedIndex。

我不相信在没有遍历每一行的情况下都可以这样做。但是如果你有分页,那么你只需循环遍历PageSize属性中的行数而不是从数据库返回的每一行。

答案 1 :(得分:0)

问题是您要为网格而不是网格排序数据源。

在排序之前获取所选行的ID,然后在排序后将其设置为选中。

答案 2 :(得分:0)

查找当前所选项目datakey非常简单 - MyGrid.SelectedDataKey.Value.ToString() 那就是你有一个DataKey,否则你必须读取两个值,这些值在MyGrid.SelectedDataKey.Values下可用

排序后,您必须迭代项目并找到具有匹配数据键的项目。 MyGrid.Rows [i] .DataItem应该有帮助 - 请注意,这仅在数据绑定时可用,因此如果您在没有重新数据绑定的情况下重新排序(例如,如果您将所有数据存储在viewstate中),它将不包含任何内容。