Как я могу добавить строку в привязанную к данным сетку, не вызывая ошибок состояния? - PullRequest
0 голосов
/ 31 января 2011

Я пытаюсь добавить строку группировки строк в свое сеточное представление с привязкой к данным. Он отлично работает при первом ответе, но при обратной передаче я получил ошибку «Не удалось загрузить viewstate».

Существует код для события RowDataBound GridView:

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

Я знаю, что проще создать группы строк в источнике данных, но, исходя из этого кода, я хочу создать базу для других сеток на сайте.

Ответы [ 2 ]

1 голос
/ 31 января 2011

Попробуйте эту ссылку .это должно помочь вам.У меня тоже была такая же проблема.Единственный способ решения проблемы - правильное понимание состояния.

0 голосов
/ 01 февраля 2011

Подумав, ответ не может быть проще: отключить состояние просмотра сетки.

Я перепривязывал источник данных при каждой подкачке или сортировке, поэтому потребность в 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

Он по-прежнему группирует столбец, но по-другому и более удобен для сортировки.Я мог бы использовать ряды и сделать ячейки невидимыми, но было бы сложнее их сохранить.Кроме того, мне нужно нарисовать линию, когда пользователь наведет на нее курсор мыши, и размах строк сильно помешает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...