当您处于 RowDataBound 事件中时,有没有办法访问另一行中的元素?
public void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
// how to compare e.Row with row above or row below?
}
当您处于 RowDataBound 事件中时,有没有办法访问另一行中的元素?
public void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
// how to compare e.Row with row above or row below?
}
从模糊的记忆中,您可以从那里引用GridView
s 的数组Row
并迭代它们。在任何情况下,您都应该能够获取 e 的位置并访问上面的行,不确定下面的行,因为那时它们还没有数据绑定,除非这是单行重新绑定镜头。
我认为你可以做的一件事是......
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 中的下一行(已经存在并且可以查看)。
但是,如果您要进行大规模的工作,我想所有这些循环都会变得很麻烦。