Как перебрать определенные столбцы в gridview?

Мне нужно перебрать определенные столбцы в сетке. Например, мне нужно зациклить каждый столбец "%", а затем назначить цвета в соответствии с их значениями, есть ли простой способ добиться этого? Благодарю.

Таблица Gridviewвведите описание изображения здесь

Событие RowDataBound

    Protected Sub gv_ssi_rzli_data_1_RowDataBound(sender As Object, e As EventArgs) Handles gv_ssi_rzli_data_1.RowDataBound

    Dim gv As GridView = gv_ssi_rzli_data_1

    For i As Integer = 0 To gv.Rows.Count - 1

        If gv.Rows(i).Cells(0).Text = "Oct" Or
            gv.Rows(i).Cells(0).Text = "Nov" Or
            gv.Rows(i).Cells(0).Text = "Dec" Then

            If gv.Rows(i).Cells(2).Text >= Session("rzli_avg_blue_1") Then
                gv.Rows(i).Cells(2).BackColor = System.Drawing.Color.LightBlue
            ElseIf gv.Rows(i).Cells(2).Text >= Session("rzli_avg_green_1") And gv.Rows(i).Cells(2).Text < Session("rzli_avg_blue_1") Then
                gv.Rows(i).Cells(2).BackColor = System.Drawing.Color.LightGreen
            ElseIf gv.Rows(i).Cells(2).Text >= Session("rzli_avg_yellow_1") And gv.Rows(i).Cells(2).Text < Session("rzli_avg_green_1") Then
                gv.Rows(i).Cells(2).BackColor = System.Drawing.Color.LightYellow
            ElseIf gv.Rows(i).Cells(2).Text <= Session("rzli_avg_red_1") Then
                gv.Rows(i).Cells(2).BackColor = System.Drawing.Color.LightPink
            End If


        End If


    Next

End Sub

1 ответ

Решение

Есть несколько способов сделать это.

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

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

For i As Integer = 0 To gv.Rows.Count - 1
    Dim row = gv.Rows(i)

    Dim rowHeaderCell = row.Cells(0)
    if rowHeadercell.Text = "Oct" Or 
       rowHeaderCell.Text = "Nov" or 
       rowHeaderCell.Text = "Dec" Then

       SetCellBackGround(row.Cells(2))
       SetCellBackground(row.Cells(4))
       ' etc.
    End If
Next

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

SetCellBackground будет выглядеть так (набирается из памяти):

Sub SetCellBackground(TableCell cell) 

    If cell.Text >= Session("rzli_avg_blue_1") Then
            cell.BackColor = System.Drawing.Color.LightBlue
        ElseIf cell.Text >= Session("rzli_avg_green_1") And cell.Text < Session("rzli_avg_blue_1") Then
            cell.BackColor = System.Drawing.Color.LightGreen
        ElseIf cell.Text >= Session("rzli_avg_yellow_1") And cell < Session("rzli_avg_green_1") Then
            cell = System.Drawing.Color.LightYellow
        ElseIf cell <= Session("rzli_avg_red_1") Then
            cell.BackColor = System.Drawing.Color.LightPink
        End If

 End Sub
Другие вопросы по тегам