C# gridview排序时,选定行高亮显示不移动
我在Web窗体上有一个ASP.net gridview,用户可以在其中选择一行。当他们选择该行时,该行将亮显为黄色。问题是,当我对表格进行排序时,它会正确排序,但高光会保持在同一行上。数据全部移动,但高光保持不变C# gridview排序时,选定行高亮显示不移动,c#,asp.net,gridview,C#,Asp.net,Gridview,我在Web窗体上有一个ASP.net gridview,用户可以在其中选择一行。当他们选择该行时,该行将亮显为黄色。问题是,当我对表格进行排序时,它会正确排序,但高光会保持在同一行上。数据全部移动,但高光保持不变 有人能建议我如何使突出显示与数据保持一致吗?问题是您正在为网格而不是网格排序数据源 排序前获取所选行的id,然后在排序后将其设置为选中。问题在于您正在为网格而不是网格排序数据源 在排序前获取所选行的id,然后在排序后将其设置为选中。查找当前选中的项datakey-MyGrid.Sele
有人能建议我如何使突出显示与数据保持一致吗?问题是您正在为网格而不是网格排序数据源
排序前获取所选行的id,然后在排序后将其设置为选中。问题在于您正在为网格而不是网格排序数据源
在排序前获取所选行的id,然后在排序后将其设置为选中。查找当前选中的项datakey-MyGrid.SelectedDataKey.Value.ToString()非常简单 如果您只有一个数据键,则必须读取这两个值,这两个值在MyGrid.SelectedDataKey.values下可用
排序之后,您必须迭代项目并找到具有匹配数据键的项目。MyGrid.Rows[i].DataItem应该对此有所帮助-请注意,这仅在数据绑定时可用,因此如果您在不重新数据绑定的情况下重新排序(例如,如果您将所有数据存储在viewstate中),它将不包含任何内容。查找当前选定项datakey非常简单-MyGrid.SelectedDataKey.Value.ToString() 如果您只有一个数据键,则必须读取这两个值,这两个值在MyGrid.SelectedDataKey.values下可用
排序之后,您必须迭代项目并找到具有匹配数据键的项目。MyGrid.Rows[i].DataItem应该对此有所帮助-请注意,这仅在数据绑定时可用,因此如果您在不重新数据绑定的情况下重新排序(例如,如果您将所有数据存储在viewstate中),它将不包含任何内容。在排序(OnSorting?)之前获取SelectedDataKey.Value。 然后在排序(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属性中的行数,而不是从数据库返回的每一行。在排序(OnSorting?)之前获取SelectedDataKey.Value。 然后在排序(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属性中的行数,而不是从数据库返回的每一行。检查此链接:阅读Mark Rideout的帖子,看看这是否适用于您:我不认为这正是我需要的。但它确实建议了一个基本框架:在排序之前获取表datakeyvalue,然后让排序发生,将selectedrowindex重新分配给该键,然后重新高亮显示。问题是如何在不循环的情况下分配正确的索引。有没有办法找到特定datakeyvalue的索引???请查看此链接:阅读Mark Rideout的帖子,看看这是否适用于您:我不认为这正是我需要的。但它确实建议了一个基本框架:在排序之前获取表datakeyvalue,然后让排序发生,将selectedrowindex重新分配给该键,然后重新高亮显示。问题是如何在不循环的情况下分配正确的索引。有没有办法找到特定datakeyvalue的索引???问题是,排序后的数据现在位于不同的索引中。我需要找到并设置新的索引。问题是,排序后的数据现在位于不同的索引中。我需要找到并设置新的索引。我得到了第一部分没有问题。但如何使用.DataItem查看单元格值???请注意,单元格值和数据源项值之间存在差异。您可以访问单元格值没有问题-只需行[]。单元格[]。控件[]集合。但这些将被格式化。访问DataItem要好得多——它实际上包含DataRow或类似类型(在调试器中确定),您可以读取该行数据绑定到的实际值。但如何使用.DataItem查看单元格值???请注意,单元格值和数据源项值之间存在差异。您可以访问单元格值没有问题-只需行[]。单元格[]。控件[]集合。但这些将被格式化。访问DataItem要好得多——它实际上包含DataRow或类似类型(在调试器中确定),并且您可以读取该行数据绑定到的实际值。