1

私の DataView の Table 属性は、私の DataTables の 1 つに割り当てられています。次に、DataView が DataGridView の DataSource として設定されます。そのようです:

View.Table = DataSet1.Tables("dtArticles")
dgvArticles.DataSource = View

私の目標は、特定の行に対して何らかのフォーマットを実行することです。残念ながら、私が見つけた唯一の方法は、CellFormatting イベントを使用することです。これは、各行を調べて、行に書式設定 (太字フォント、背景色) が必要かどうかを確認する必要があるため、かなり長くなります。

セルの書式設定

Private Sub dgvArticles_CellFormatting(sender As Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgvArticles.CellFormatting
    Dim drv As DataRowView
    If e.RowIndex >= 0 Then
        If e.RowIndex <= DataSet1.Tables("dtArticles").Rows.Count - 1 Then
            drv = View.Item(e.RowIndex)
            Dim c As Color

            'Bolds if it is standard, makes it regular if it's not standard and already bold
            If drv.Item("Standard").ToString = "Yes" Then
                dgvArticles.Rows(e.RowIndex).DefaultCellStyle.Font = New Font("Microsoft Sans Sherif", 8, FontStyle.Bold)
            End If

            'Test if Standard is "No" and if the row is currently bold, if it is, put it back to regular
            If drv.Item("Standard").ToString = "No" And Not dgvArticles.Rows(e.RowIndex).DefaultCellStyle.Font Is Nothing Then
                If dgvArticles.Rows(e.RowIndex).DefaultCellStyle.Font.Bold Then
                    dgvArticles.Rows(e.RowIndex).DefaultCellStyle.Font = New Font("Microsoft Sans Sherif", 8, FontStyle.Regular)
                End If
            End If

            'Puts a red color to the rows who are not available
            If drv.Item("Available").ToString = "No" Then
                'Change back color
                c = Color.LightSalmon
                e.CellStyle.BackColor = c
            End If
        End If
    End If
End Sub

これが行うことは、DataGridView に追加された各行のセルです。列の現在の値がはいまたはいいえに等しいかどうかを確認しますStandard。結果に応じて、行を太字/太字にします。同じ原則が私のAvailableコラムにも当てはまります。Available の値が「いいえ」の場合は、行の背景色を明るい赤にします。このイベントは何度も発生します (10 列程度の DataTable を持つ 10,000 件の記事)。

平均約2.2~2.7秒


DataView を反復処理する

Dim i As Integer = 0
For Each dt As BillMat.dtArticlesRow In View.Table.Rows
    If dt.Standard = "Oui" Then dgvArticles.Rows(i).DefaultCellStyle.Font = New Font("Microsoft Sans Sherif", 8, FontStyle.Bold)
    If dt.Available = "Non" Then dgvArticles.Rows(i).DefaultCellStyle.BackColor = Color.LightSalmon
    i += 1
Next

平均約1.5~1.7秒


StandardLINQ を使用して、どの列が「はい」に等しく、どの列が「いいえ」に等しいRowIndex を選択することは可能Availableですか? もしそうなら、インデックスを使用してフォーマットを適用する方が、10,000 件の記事全体を反復処理するよりもはるかに高速ではないでしょうか?

4

1 に答える 1