我在webform上有一个ASP.net gridview,用户可以选择一行。当他们选择它时,该行突出显示为黄色。问题是,当我对表进行排序时,它会正确排序,但突出显示保持在同一行。数据全部移动,但重点仍然存在。
任何人都可以建议我如何使重点与数据保持一致吗?
答案 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中),它将不包含任何内容。