Обработка RowDataBound заставляет динамически связанный GridView показывать только первую запись - PullRequest
1 голос
/ 28 июня 2011

У меня есть элемент управления GridView, который я динамически привязываю к DataTable, который заполняется запросом, построенным на основе набора выбранных параметров.

То, что я пытаюсь сделать, - это просто обработать событие RowDataBound, чтобы отформатировать определенные строки на основе значения поля базы данных.Код в этом обработчике событий работает нормально.Моя проблема заключается в том, что при вызове этого события GridView отображает только первую запись в DataTable, почти как если бы Gridview останавливался после привязки к DataTable после привязки первой строки.

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

Есть идеи, почему простая обработка этого события заставляет Gridview делать это?

Я точно знаю, что достаточно возвращаемых данных (DataTable заполняется всеми записями, а GridView показывает все записи в порядке, не касаясь события RowDataBound).

Я добавляю обработчик сразу после генерации запроса, заполняю DataTable и привязываю GridView:

oDA.Fill(oDTbl)
figs_gv.DataSource = oDTbl
figs_gv.DataBind()
AddHandler figs_gv.RowDataBound, AddressOf gvRowDataBound 

Сам обработчик:

Protected Sub gvRowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)

    If e.Row.RowType = DataControlRowType.DataRow Then
        If (e.Row.DataItem("Have") = "Yes") Then
            For i As Integer = 1 To e.Row.Cells.Count
                e.Row.Cells(i).BackColor = Drawing.ColorTranslator.FromHtml("#d3f1c7")
            Next
        End If
    End If

End Sub

Iтакже определили, что при обработке RowDataBound событие GATView DATABOUND никогда не запускается;Кажется, он прекращает связывание сразу после связывания первого ряда.

1 Ответ

1 голос
/ 29 июня 2011

Я решил мою проблему.

Проходя по моему коду, я обнаружил, что получаю сообщение об ошибке «Индекс вне диапазона» при циклическом просмотре ячеек каждой строки следующим образом:

For i As Integer = 1 To e.Row.Cells.Count
     e.Row.Cells(i).BackColor = Drawing.ColorTranslator.FromHtml("#d3f1c7")
Next

Исключение было брошено до того, как он получил возможность перейти к следующему ряду. Так как я хотел пропустить первую ячейку и применить цвет фона только ко всем последующим ячейкам, я должен был установить для него значение цикла на единицу меньше числа ячеек, как таковое:

For i As Integer = 1 To e.Row.Cells.Count - 1
     e.Row.Cells(i).BackColor = Drawing.ColorTranslator.FromHtml("#d3f1c7")
Next
...