0

DataGridViewから読み取り、データをRichTextBoxにエクスポートするのに問題があります。4つのdataGridViewから読み取り、各セルからテキストボックスの文字列にデータをエクスポートするプログラムを作成しました。小さいファイルの場合はうまく機能しますが、大きいファイルがあると、プログラムがフリーズして結果が表示されません。それを解決する方法はありますか?

私がExcelでセルを読み取るために使用する私のコード:

for (int i = 0; i < dataGridView4.Rows.Count - 1; i++)
{
    if (dataGridView4.Rows[i].Cells["ABC"].Value.ToString() != "")
    {
        richTextBox1.Text += "ABC_ " + dataGridView4.Rows[i].Cells["ABC"].Value.ToString() 
        + " " + dataGridView4.Rows[i].Cells["DEF"].Value.ToString().Replace("\n", "") + ";";
    }
}

もちろん、このループを何度も繰り返します。coziはdatagridviewに多くの列を持っています

4

2 に答える 2

4

それ以外の

richTextBox1.Text += "ABC_ " + dataGridView4.Rows[i].Cells["ABC"].Value.ToString() 
                + " " + dataGridView4.Rows[i].Cells["DEF"].Value.ToString().Replace("\n", "") + ";";

使用する:

richTextBox1.AppendText("ABC_ " + dataGridView4.Rows[i].Cells["ABC"].Value.ToString() 
                + " " + dataGridView4.Rows[i].Cells["DEF"].Value.ToString().Replace("\n", "") + ";");

それははるかに速く動作します。

これに加えて、代わりにStringBuilderを使用してテキストを追加し、最後にそのテキストをrichTextBox1に設定することができます。

StringBuilder sb = new StringBuilder();
for (int i = 0; i < dataGridView4.Rows.Count - 1; i++)
{
     if (dataGridView4.Rows[i].Cells["ABC"].Value.ToString() != "")
     {

           sb.Append("ABC_ " + dataGridView4.Rows[i].Cells["ABC"].Value.ToString()
                    + " " + dataGridView4.Rows[i].Cells["DEF"].Value.ToString().Replace("\n", "") + ";");
     }
}
richTextBox1.Text = sb.ToString();
于 2012-11-13T10:29:51.483 に答える
0

問題は解決しましたが、私は何かを説明する必要があります。

NikolaDのソリューションは、そのコードが大きなループで複雑なコントロール(richTextBox)にアクセスしないため、はるかに高速になります。

フォームのコントロールの値が更新されると、いくつかのイベントがトリガーされます。最も遅いのは画面の更新です。これを10000回実行すると、かなりの時間がかかります。

RAM(非常に高速なメモリ)に格納されている通常の変数、List、またはStringBuilderへのデータの書き込み(バッファリング)は、表示を更新する必要がないため、はるかに高速です。

数マイクロ秒ごとに画面を更新しようとしないでください。不可能です:)

于 2012-11-13T10:46:40.230 に答える