RowDataBound没有显示GridView中的所有行

时间:2016-01-26 16:45:19

标签: asp.net vb.net gridview

我有一个RowDataBound循环每个记录并使用OrderId执行查询以获取详细数据。然后,它的值绑定到名为gvOrders的嵌套GridView。我遇到的问题是我只得到绑定到GridView gvOrders的循环的最后一个OrderId值的结果。任何人都可以帮我获取GridView gvOrders中所有循环的结果吗?我的绑定方法似乎存在问题。

Protected Sub GridViewDetailInfo_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridViewDetailInfo.RowDataBound

    Dim strSQL As String

    If e.Row.RowType = DataControlRowType.DataRow Then

        Dim OrderId As String = e.Row.Cells(1).Text
        Dim gvOrders As GridView = DirectCast(e.Row.FindControl("gvOrders"), GridView)

        strSQL = "select Qty, Prod, Date from Order..orders where OrderNo='" + OrderId + "'"

        Me.SqlDataSourceDetail_Child.SelectCommand = strSQL
        gvOrders.DataBind()

    End If

End Sub

1 个答案:

答案 0 :(得分:1)

您对所有子GridView使用相同的SqlDataSource(SqlDataSourceDetail_Child)。因此,当它最终到达最后OrderId时,您设置共享 SelectCommand的{​​{1}},现在所有子GridView都获得相同的共享集数据。

为了解决这个问题,每个子GridView都需要自己的数据源。你可以继续你的方式为每个子GridView创建一个单独的SqlDataSource,但我猜测GridViews的数量不是恒定的。在这种情况下,您将需要删除子SqlDataSource并将数据源(如DataTable)绑定到每个子GridView。

这至少应该指向正确的方向:

SqlDataSource

另请注意,您向SQL injection开放。我建议调查parameterized queries