DataGridView CellFormatting イベントによりフォーム ペイントが妨げられる
-
11-09-2019 - |
質問
C#、Winforms、および .Net 3.5 を使用しています
私のフォームにはカスタムがあります DataGridView
(セルフォーマットイベント中のちらつきを防ぐためにダブルバッファリングされています。 ここで見られるように)。データベース検索を実行するときは、結果のデータセットを datagridview
.
私が扱うのは、 CellFormatting
データに応じて行を特定の色でペイントするイベント。
私のDataGridViewコード:
resultsGridView.DataSource = results.DefaultViewManager.DataSet.Tables[0];
resultsGridView.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue;
resultsGridView.BorderStyle = BorderStyle.Fixed3D;
resultsGridView.CellFormatting += new DataGridViewCellFormattingEventHandler(resultsGridView_CellFormatting);
私のCellFormattingコード:
void resultsGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
int rowIndex = e.RowIndex;
DataGridViewRow therow = resultsGridView.Rows[rowIndex];
if ((bool)therow.Cells["Sealed"].Value == true)
{
therow.DefaultCellStyle.BackColor = Color.Pink;
}
if (therow.Cells["Database"].Value as string == "PNG")
{
therow.DefaultCellStyle.BackColor = Color.LightGreen;
}
}
CellFormatting を処理するとき、フォーム全体の Paint イベントがオフになっているように見えることを除いて、すべてがうまく機能します。テキストボックス内のカーソルの点滅が止まり、フォームのメニューストリップは次のようになります。
上が検索前、下が検索後です。メニュー項目がある場所にマウスを移動するまでメニューバーは再描画されません。その後、マウスをメニューバーの外に移動しても、強調表示される最後の項目はそのまま残ります。フォームを移動すると再描画されるようですが、問題は残ります。
コメントアウトすると、 resultsGridView.CellFormatting
datagridview コード内の行により、問題は完全に修正されます。
セルのペイントが間違っているのでしょうか、それとも何か他に対処する必要があるのでしょうか?
解決
おそらく、このイベント内で例外が発生していると考えられます。処理がどのように定義されているかはわかりませんが、コードを try catch で囲むことが最初のステップとなるでしょう。
try
{
int rowIndex = e.RowIndex;
....
}
catch(Exception ex)
{
System.Diagnostics.Trace.Error(ex.message);
}
もう一度見てみると、そうは思わない therow.Cells["Sealed"]
働くでしょう。次のようなことを試してください therow.Cells["dataGridViewTextBoxColumn2"]
. 。セルのインデックスは次のとおりです。 列名, 、 ない データプロパティ名.