【解決方法】セルの書式設定により、データグリッドビューの作成が遅くなりますか?


こんにちは、問題と質問があります。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

コメント

タイトルとURLをコピーしました