0

我正在尝试将行分组行添加到我的数据绑定网格视图中。它在第一次响应时工作正常,但在回发时我收到“无法加载视图状态”错误。

GridView 的 RowDataBound 事件的代码如下:

Private Sub AddGroupingRow(ByRef eRow As GridViewRow, ByVal Css As String, ByVal ColSpan As Integer, ByVal Txt As String)
    Dim cell As New TableCell()
    cell.ColumnSpan = ColSpan
    cell.CssClass = "Spacing FieldCell"
    cell.Text = Txt

    Dim row As New GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal)
    row.CssClass = Css
    row.Cells.Add(cell)

    Dim tbl As Table
    tbl = eRow.Parent
    tbl.Rows.AddAt(eRow.RowIndex + 1, row)
End Sub

Private Prev_Client_ID As Integer = -1
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim dr As Data.DataRowView = TryCast(e.Row.DataItem, Data.DataRowView)

        If dr IsNot Nothing AndAlso dr.Row.RowState <> Data.DataRowState.Added Then
            Dim Client_ID As Integer = dr.Item("Client_ID")

            If Client_ID <> Prev_Client_ID Then AddGroupingRow(e.Row, "Group", 8, dr.Item("Client_Name"))
            Prev_Client_ID = Client_ID
        End If

    End If
End Sub

我知道在数据源上创建分组行更容易,但是从这段代码中,我想为站点上的其他网格创建一些基础。

4

2 回答 2

1

试试这个链接。它应该可以帮助你。我也有同样的问题。解决的唯一方法是正确理解视图状态。

于 2011-01-31T20:32:25.483 回答
0

经过一番思考,答案再简单不过了:禁用gridview的viewstate。

我在每次分页或排序时重新绑定数据源,因此对视图状态的需求是最小的,除了 PageSize 和 PageIndex,我被迫手动跟踪。

这是一个相当大的权衡:像 PageSize 和 PageIndex 这样的东西必须事后手动管理,因为它们的状态由 ViewState 保存。

因此,即使完全按照我的意图去做,我也决定采用一个简单的替代解决方案:

If Cliente_ID <> Cliente_ID_Anterior Then
    For i As Integer = 0 To e.Row.Cells.Count - 1
        e.Row.Cells(i).Style("border-top") = "solid 1px #777777"
    Next
    e.Row.Cells(0).Style("border-bottom") = "none"
Else
    e.Row.Cells(0).Text = "&nbsp;"
    e.Row.Cells(0).Style("border-top") = "none"
    e.Row.Cells(0).Style("border-bottom") = "none"
End If

它仍然对列进行分组,但以另一种方式,并且对排序更友好。我可以使用行跨度并使单元格不可见,但它会更难保留。此外,当用户将鼠标移到线条上时,我需要绘制线条,而行跨度会阻碍很多。

于 2011-02-01T19:06:24.590 回答