1

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

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

2 回答 2

1

从模糊的记忆中,您可以从那里引用GridViews 的数组Row并迭代它们。在任何情况下,您都应该能够获取 e 的位置并访问上面的行,不确定下面的行,因为那时它们还没有数据绑定,除非这是单行重新绑定镜头。

于 2011-11-30T05:03:46.463 回答
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 与上面的行或下面的行进行比较......但如果它们按顺序进入,则下面没有行。这是我之前没有真正考虑过的事情,但我记得在使用 RowDataBound 以这种方式运行的断点进行测试时。

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

但是,如果您要进行大规模的工作,我想所有这些循环都会变得很麻烦。

于 2011-11-30T06:11:36.847 回答