C# ASP.NET Gridview:从所选行获取页面索引

C# ASP.NET Gridview:从所选行获取页面索引,c#,asp.net,gridview,paging,C#,Asp.net,Gridview,Paging,我需要在gridview中突出显示已编辑行的功能,因此在gridview的RowDataBound上,我检查哪一行是已编辑的,并更改css样式。 有一个小问题,更改可能会使行显示在不同的页面上。 如何从该行获取页面索引以跳转到该页面?请看这里: untested code in vb.net *assuming there are studentid from 1 to 100 in the database *assuming pagesize of gridview is 10 di

我需要在gridview中突出显示已编辑行的功能,因此在gridview的RowDataBound上,我检查哪一行是已编辑的,并更改css样式。 有一个小问题,更改可能会使行显示在不同的页面上。 如何从该行获取页面索引以跳转到该页面?

请看这里:

untested code in vb.net


*assuming there are studentid from 1 to 100 in the database
*assuming pagesize of gridview is 10


dim studentid_of_edited_row as integer = 11


dim da as new dataadapter(strquery,conn)
dim dt as new datatable
da.fill(dt)


dim desired_pageindex as integer = 0


for i as integer = 0 to dt.rows.count - 1
  if dt.rows(i)("studentid") = studentid_of_edited_row then
    desired_pageindex = i / gridview1.pagesize
    exit for
  end if
next


gridview1.pageindex = desired_pageindex
gridview1.datasource = dt
gridview1.databind

属性PageIndex允许您获取或设置当前显示页面的索引。

当您编辑所选行时,显然需要一些唯一标识符将更改保存回数据存储。将该标识符保存到局部变量。然后,当您查看OnRowDataBound事件中的每一行时,将其唯一标识符与当前保存的值进行比较。如果是相同的,那么您已经找到了您的行。

我将添加一个包含RowNumber的额外列。如果您使用的是MSSQL,那么

SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1 [DESC]) as RowNumber FROM table
并在DataTable.Rows中查找已更改的行。使用DataTable.Rows.Select的行与所有列值匹配(如果您有唯一的列,请确保您可以使用该列,如果您没有,您就没有运气了!您可以获得多行,所以请选择一行!如果唯一性不太重要,则没有任何意义)并获取RowNumber值,该值也是使用ROW_NUMBER()TSQL函数添加到表中的列。剩下的是数学

int PageNumber = PageSize < RowNumber ? ((RowNumber - 1) / PageSize) + 1 : 1;
int PageNumber=PageSize
编辑:1-我假设您为页面的每次往返查询数据库
2-ROW_NUMBER()应该可以使用Oracle和MySql,或者我知道它们有相同的运算符…

我也考虑过这个解决方案,但它并不是那么理想和优雅。仅仅为了这个目的而在行中迭代是一项很大的开销。@Fiur:我不确定“开销”是什么。您已经在重新绑定您的数据源,这意味着您已经拥有了它。如果你有它,为什么不循环通过它找到正确的一行呢?根据你自己的承认,这一行可能出现在任何地方,如果不进行搜索,就无法找到它。值得注意的是,他的解决方案只是将循环添加到您已经在做的代码中,再加上所需的页面变量/设置。这是+8行,1个循环。不完全是“很多开销”,这正是我正在做的,我可以很容易地找到那一行,我的问题和我要问的问题是如何从该行获取页面索引?