[ad_1]
こんにちは、問題と質問があります。dg は、作成したバインディング ソースを入力した datagridview です。
これがコードです
C#
daActivity.SelectCommand = new SqlCommand("SELECT * from DataActivity", cs); dsActivity.Clear(); daActivity.Fill(dsActivity); ActivityBS.DataSource = dsActivity.Tables[0]; dg.DataSource = ActivityBS;
セルの書式設定イベントで、このコードがあります
C#
for (int i = 0; i < dg.RowCount; i++) { string status = dg.Rows[i].Cells[12].Value.ToString(); if (status == "OPEN") { dg.Rows[i].DefaultCellStyle.BackColor = System.Drawing.Color.LightCoral; } if (status == "INFO") { dg.Rows[i].DefaultCellStyle.BackColor = System.Drawing.Color.LightBlue; } if (status == "CLOSED") { dg.Rows[i].DefaultCellStyle.BackColor = System.Drawing.Color.LightGreen; } }
そして、このイベントは datagridview (dg) の入力を遅くします…なぜ???? これを克服する方法はありますか、それとも私のコードに何かがあるのでしょうか….まあ、支援と意見が必要です
解決策 1
実行しないと確認するのは困難ですが、最初に気付くべきことは、CellFormating がセルごとに呼び出されることです。呼び出されるたびにすべての行をループしているため、これがソースであることがわかる場合があります。減速の。
ただし、最初に行うべきことは、いくつかの数値を取得することです。どこにどれだけの時間が費やされているかを把握するまで、実際に改善していることを確認することはできません.
を見てください ストップウォッチクラス[^] – ポイントからポイントへのタイミングの正確な方法を提供します。 DataSource 設定の前後にタイマーを開始し、CellFormatting イベントにタイマーを追加します。 どのような数値が得られるかを確認し、どこが遅いかを調べ始めることができます。
解決策 2
In my case the problem was caused by DataGridView property AutoSizeColumnsMode=AllCells. Probably after cell formatting all other cells in column and header cell had to be redrawn to fit theirs dimensions to the new cell dimensions. After I was changed property value to it default value "None", grid is painted immediatel
[ad_2]
コメント