レガシーコードを改善する方法があるかどうかを確認するために投稿しています。コードはDataGridViewにx行のデータを設定します。当初、データは少量であるため、コードは正常に機能しました。しかし、データが極端に増加しており、DataGridViewにデータを読み込む際のパフォーマンスが非常に遅いことがわかりました。DataGridViewの大きなデータにバーチャルモードを使用する方法
基本的に、私はいくつかの考慮事項があることを知っています(例えばVirtual Mode)。しかし、私が取りたいアプローチは、配列またはListを使用して配列に変換し、Rows.AddRange(配列)を呼び出して行の範囲を追加することです。しかし、私はそれを実装するのに問題があります。
現状では、これはコードが存在するものである:
if (value !=0)
{
int row = 0;
dataGridView1.AddRow();
dataGridView1.Rows[row].Cells[0] = "Test";
dataGridView1.Rows[row].Cells[1] = 9;
dataGridView1.Rows[row].Cells[2] = "Test Two";
dataGridView1.Rows[row].Cells[3] = "Test Three";
row++;
}
if (valueTwo !=0)
{
dataGridView1.AddRow();
dataGridView1.Rows[row].Cells[0] = "Test";
dataGridView1.Rows[row].Cells[1] = 9;
dataGridView1.Rows[row].Cells[2] = "Test Two";
dataGridView1.Rows[row].Cells[3] = "Test Three";
row++;
}
ので、これは当然のことながら、全く効率的ではありません。私は知っている.AddRow()はそれ自体で課税方法であり、個々に行を追加すると、1つ1つはうまくいきません。
私のような何かを試してみました:
object[] data = {"Test", 9, "Test Two", "Test Three"};
List<DataGridViewRow> list = new List<DataGridViewRow>();
for (int i = 0; i < data.Length; i++)
{
DataGridViewRow row = new DataGridViewRow();
row.SetValues(data[i]);
list.Add(row);
}
dataGridViewRow1.Rows.AddRange(list.ToArray());
しかし、これを実行すると、私にSetValuesライン上にNullPointerExceptionを取得します。
これを行う最善の方法は、DataTableを作成するか仮想モードを使用することですが、行を追加するのではなく、範囲を追加してデータのコンテナを渡す方法を試してみたいと思います。
私の説明ではっきりしていることを希望します。私がさらに説明する必要があるかどうかを教えてください。
編集:私はバーチャルモードを使用することが最善の方法だと思います。私は本当にそれを行う方法はわかりません。私はMSNのチュートリアルをチェックしましたが、少し混乱しました。私が10万行のバーチャルモードを実装する場合、どうやってそれをやっていくのですか?本当に素晴らしいことはありません。合計10,000行しか表示されません。
ありがとうございます。私の掲示された元のコードを考えれば、これは最も速い方法ですか? – CireS
また、一度に50の行を表示するために単純な仮想モードを実行する場合、何をする必要がありますか? – CireS