【问题标题】:Accessing another row while in Gridview RowDataBound?在 Gridview RowDataBound 中访问另一行?
【发布时间】:2011-11-30 04:55:03
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net gridview rowdatabound


    【解决方案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 中的下一行(已经存在并且可以查看)。

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

    【讨论】:

    • 您好 CptSupermrkt,非常感谢您的建议。我按照您的建议做了 - 只需在数据绑定后循环遍历 gridview,而不是尝试在 RowDataBound 中执行此操作。它添加了几行额外的代码,但效果很好。再次感谢:)
    【解决方案2】:

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

    【讨论】:

    • 您好,宠儿,我最终只是在数据绑定后循环通过gridview,而不是尝试在ItemDataBound中进行。谢谢你的建议:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多