2012-11-13 42 views
0

我有一個麻煩從DataGridView閱讀,然後將數據導出到RichTextBox中。我做了一個程序,它從4個dataGridView中讀取數據,並將每個單元格的數據導出到Textbox中的字符串中。對於小文件他們工作得很好,但是當我有更大的文件,我的程序凍結,並沒有告訴我結果。有什麼辦法解決它?快速的方法來讀取從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", "") + ";"; 
    } 
} 

當然它重複這個循環多次,怎麼我在DataGridView中有很多列

+0

你嘗試存儲字符串在內存中,直至加載完成,然後將它們打印成文本? –

+0

@trippino:我認爲與我的代碼上面,它直接從datagridview出口到richtextbox或我錯了嗎? –

+0

是的。儘量只做到這一點,當你完成加載(如果它是你的意圖相同,當然) –

回答

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(); 
+0

謝謝,作品完美。 –

0

問題已解決,但我必須解釋一些事情。

NikolaD的解決方案將是快了很多,因爲該代碼沒有在訪問中大回路複雜的控制(RichTextBox中)。

對形式的控制值的任何更新被觸發的一些事件。最慢的事情是屏幕更新。如果你運行10000次 - 這將花費很多時間。

寫作(bufferring)數據正常變量,列表或StringBuilder的它只是存儲在RAM(非常快的內存)是快了很多,因爲它沒有更新顯示。

不要嘗試更新屏幕每隔幾微秒,其不可能:)

+0

謝謝,我會嘗試從NikolaD的StringBuilder。那麼我會在這裏發帖,如果它快得多 –

+0

是的,它比我想的要快得多,特別是對於大文件 –