GridView排序时突出显示的行不会移动
我在webform上有一个ASP.net gridview,用户可以选择一行。当他们选择它时,该行将突出显示为黄色。问题是,当我排序表时,它排序正确,但突出显示保持在同一行。数据全部移动,但突出显示仍然存在。GridView排序时突出显示的行不会移动
任何人都可以提出如何使突出显示保持与数据?
在排序之前抓取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属性中的行数,而不是从数据库返回的每一行。
问题是,您正在排序网格的数据源,而不是网格。
在排序前获取所选行的ID,然后在排序后将其设置为选中状态。
问题是,排序后数据现在处于不同的索引中。我需要找到并设置新的索引。 – MAW74656 2010-11-05 19:09:12
很简单找到当前选择的项目datakey - MyGrid.SelectedDataKey.Value.ToString() 如果你有一个单一的DataKey那是,不然你要读两个值,这是在MyGrid.SelectedDataKey.Values
可用排序后,您必须迭代项目并找到具有匹配数据项的项目。 MyGrid.Rows [i] .DataItem应该对此有所帮助 - 请注意,这仅在数据绑定时可用,所以如果您重新排序而没有重新数据绑定(例如,如果将所有数据存储在视图状态中),它将不包含任何内容。
检查此链接:阅读马克Rideout的后,看看是否适合你:http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/01f937af-d0d0-4de5-8919-088e88c5af77/ – mint 2010-11-05 19:02:38
我不认为这正是我需要的。但它确实提供了一个基本框架:在排序之前获取表datakeyvalue,然后让排序发生,将selectedrowindex重新分配给该键,然后重新高亮。问题是如何在没有循环的情况下分配正确的索引。 – MAW74656 2010-11-05 19:08:19
有没有一种方法可以找到特定datakey值的索引? – MAW74656 2010-11-05 19:33:52