在Gridview RowDataBound中访问另一行?

时间:2011-11-30 04:55:03

标签: c# asp.net gridview rowdatabound

当你在RowDataBound事件中时,有没有办法访问另一行中的元素?

public void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // how to compare e.Row with row above or row below?
}

2 个答案:

答案 0 :(得分:1)

从模糊的记忆中,你可以从那里引用GridView的{​​{1}}数组并迭代它们。您应该能够获得e的位置并且无论如何都可以访问上面的行,不确定下面的行,因为它们不是数据绑定然后我想,除非这是一行重新绑定。

答案 1 :(得分:1)

我认为你可以做的一件事是......

foreach (GridViewRow gvrow in GridView1)
{
    //loop through gridview's rows and find the row you're looking for
}

我相信RowDataBound按照数据源所包含的顺序添加行,因此如果DataTable中有100条记录并且将DataTable绑定到GridView,则RowDataBound将被调用100次,对于每一行,按照它们存在于DataTable中的顺序。因此,您提到使用RowDataBound将e.Row与上面的OR行或下面的行进行比较...但是如果它们按顺序进入,则下面没有行。这是我以前没有想过的东西,但我记得在使用断点进行测试时RowDataBound以这种方式运行。

如果你不能得到类似的工作,并且即使它不漂亮并且没有得到任何更好的答案你也需要这样做,你可以存储你的数据绑定DataTable的副本或任何你的来源数据进入ViewState或Session变量,如ViewState [“myDataTable”]。然后,您可以在RowDataBound事件上检索DataTable,并查看由e.Row表示的行上方和下方的行(前提是您有某种类型的游标,如ID来标识行)。通过执行此操作,您可以查看将由RowDataBound添加到GridView的下一行,因为它将是DataTable中的下一行(已存在且可以查看)。

如果你正在做大规模的事情,我想所有这些循环都会变得麻烦。