Обработка RowDataBound заставляет динамически связанный GridView показывать только первую запись

У меня есть элемент управления 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

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

1 ответ

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

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

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
Другие вопросы по тегам