Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# gridview排序时,选定行高亮显示不移动_C#_Asp.net_Gridview - Fatal编程技术网

C# gridview排序时,选定行高亮显示不移动

C# gridview排序时,选定行高亮显示不移动,c#,asp.net,gridview,C#,Asp.net,Gridview,我在Web窗体上有一个ASP.net gridview,用户可以在其中选择一行。当他们选择该行时,该行将亮显为黄色。问题是,当我对表格进行排序时,它会正确排序,但高光会保持在同一行上。数据全部移动,但高光保持不变 有人能建议我如何使突出显示与数据保持一致吗?问题是您正在为网格而不是网格排序数据源 排序前获取所选行的id,然后在排序后将其设置为选中。问题在于您正在为网格而不是网格排序数据源 在排序前获取所选行的id,然后在排序后将其设置为选中。查找当前选中的项datakey-MyGrid.Sele

我在Web窗体上有一个ASP.net gridview,用户可以在其中选择一行。当他们选择该行时,该行将亮显为黄色。问题是,当我对表格进行排序时,它会正确排序,但高光会保持在同一行上。数据全部移动,但高光保持不变


有人能建议我如何使突出显示与数据保持一致吗?

问题是您正在为网格而不是网格排序数据源


排序前获取所选行的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或类似类型(在调试器中确定),并且您可以读取该行数据绑定到的实际值。