2009-10-06 90 views
2

我需要在GridView中突出显示编辑的行的功能,所以在GridView的RowDataBound上,我检查哪一个是编辑过的并更改了CSS样式。 有一个小问题,更改可能会使该行显示在不同的页面上。 如何从行中获取PageIndex以跳转到该页面?ASP.NET Gridview:从选定的行获取PageIndex

回答

2
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 
+0

我想关于这个解决方案也是如此,但它并不是那么优雅和优雅。为了达到这个目的,遍历行的开销很大。 – Fiur 2009-10-08 15:46:46

+0

@菲尔:我不确定“开销”是什么。你已经重新绑定你的数据源,所以这意味着你有*它。如果你有它,为什么不通过它找到正确的行?通过你自己的招生,该行可以出现在任何地方,没有找到它就没有办法找到它。作为一个说明,他的解决方案只添加了循环代码,你已经在做,加上所需的页面变量/设置。这是+8行和1个循环。不完全是“很多开销” – JustLoren 2009-10-13 13:06:46

0

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

+0

这就是我正在做的事情,我可以找到行很容易,我的问题和我问的问题是如何从行中获取页索引? – Fiur 2009-10-14 07:00:25

1

我会添加一个包含RowNumber的额外列。如果使用的是MSSQL很容易,因为

SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1 [DESC]) as RowNumber FROM table 

,发现使用可以匹配所有列值(如果你有一个独特的列确保您可以使用DataTable.Rows.Select更改的行INT DataTable.Rows,如果你不是没有运气!你可以得到多于一行所以选择一个!如果唯一性不重要,没有任何意义),并获得RowNumber值,这也是通过使用添加到表中的列ROW_NUMBER()TSQL函数。其余的是数学;

int PageNumber = PageSize < RowNumber ? ((RowNumber - 1)/PageSize) + 1 : 1; 

编辑:1 - 我想你对每个查询数据库往返页面 2- ROW_NUMBER()应该工作的Oracle和MySQL我beleive或具有同等经营者,我知道的...