2

グリッドビューの特定の列をループする必要があります。たとえば、すべての「%」列をループして、値に応じて色を割り当てる必要があります。それを実現する簡単な方法はありますか? ありがとう。

グリッドビュー テーブル ここに画像の説明を入力

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
4

1 に答える 1

0

これを行うにはいくつかの方法があります。

まず、行をバインドするたびにグリッド全体を読み取っているように見えることを指摘しておく必要がありますが、これは不要に思えます。

それはさておき、おそらく最も簡単な方法は、値の範囲との比較を独自のメソッドに行うコードを抽象化し、パラメーターをテストおよび変更するセルにすることです。列インデックス 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

上記のように、何らかの理由で 10 月から 12 月の数字を強調したいだけだと思います。それを変更したい場合、または他の四半期に別の色のセットを使用したい場合は、そのように言ってください.

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
于 2012-09-26T00:01:24.300 に答える