1

VB.NET と VS2012 に DGV があります。さまざまなセルのセル書式を動的に変更しようとしています。以下は私のコードです:

Private Sub gridFinancial_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles gridFinancial.CellFormatting
    Try
        For Each row As chgltrDataSet.gridsourceRow In frmFinBatchChrg.ChgltrDataSet.gridsource.Rows
            If gridFinancial.CurrentRow.Cells("CompBool").Value = True Then
                Me.gridFinancial.CurrentRow.Cells(0).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(1).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(2).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(3).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(4).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(5).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(6).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(7).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(8).Style.BackColor = Color.Yellow

                Me.gridFinancial.CurrentRow.Cells(0).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(1).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(2).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(3).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(4).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(5).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(6).ReadOnly = True
                Me.gridFinancial.Update()
                Me.gridFinancial.Refresh()
    End if

    Catch ex As Exception

    End Try


End Sub

私はこれを読みました: http://msdn.microsoft.com/en-us/library/1yef90x0.aspxおそらく何かが欠けているかもしれませんが、現在、そのコードが適用されている場合、DataGridView はそのコードのみを反映します。 DataGridView が描画された後、影響を受けるセルの 1 つをクリックします。つまり、DataGridView がロードされた後、セルはクリックした後にのみ黄色になります (その行内の黄色であるはずのすべてのセルが黄色に表示されます)。どうしてこれなの?何が間違っているのかわかりません。

副次的な質問として、このセル フォーマット イベントは、DGV が描画される前に少なくとも 40 ~ 50 回発生し、6 行の DataSource しかありません。これのためのより良いイベントトリガーはありませんか? 私のコードはもっと良いものになると確信していますが、それは非常に非効率的です。

上記のコードの読み取り専用プロパティは正常に機能するため、イベントが正しくトリガーされていることがわかります。

4

1 に答える 1

1

あなたのようにセルスタイルを設定する代わりに、DataGridViewCellFormattingEventArgs.

だから、このようなもの:

e.CellStyle.BackColor = Color.Yellow

考慮すべきもう 1 つの点は、多くの場合、イベントCellFormatting内からハンドラーをアタッチする方がよいということです。DataBindingComplete

Private Sub DataGridView1_DataBindingComplete(sender As System.Object, e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles DataGridView1.DataBindingComplete
    AddHandler DataGridView1.CellFormatting, AddressOf Me.DataGridView1_CellFormatting
End Sub

これにより、後のイベントがアタッチされる前にすべてが完了していることを確認することで、DataGridView のビジュアル部分がレンダリングされるときの奇妙な動作に対処できます。


DataBindingComplete イベントに関するこのヒントにより、CellFormatting への不要な呼び出しを少なくとも減らすことができます。セルが更新されるたびにセルの書式設定が実行されます。すべてが起動して実行されると、これはユーザーがセルを離れた 1 回だけです。

于 2013-01-29T23:26:04.970 に答える