2012-11-13 2 views
0

DataGridView에서 읽은 다음 데이터를 RichTextBox로 내보내는 데 문제가 있습니다. 나는 4 dataGridView에서 읽은 프로그램을 만들어 각 셀의 데이터를 텍스트 상자의 문자열로 내 보냅니다. 작은 파일의 경우 훌륭하게 작동하지만 큰 파일이있을 때 프로그램이 멈추고 결과가 표시되지 않습니다. 그것을 해결할 방법이 있습니까? 내가 엑셀에서 셀을 읽는 데 사용할Datagridview에서 TextBox로 빠르게 읽는 방법

내 코드 : 내가 DataGridView에 많은 열이 사촌

물론
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", "") + ";"; 
    } 
} 

그것의

+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

감사합니다, 작품 pefect. –

0

문제는 해결되었지만 설명해야합니다.

큰 루프에서 코드가 복잡한 컨트롤 (richTextBox)에 액세스하지 않아 NikolaD의 솔루션이 훨씬 빨라졌습니다.

양식 컨트롤의 값을 업데이트하면 일부 이벤트가 트리거됩니다. 가장 느린 것은 화면 업데이트입니다. 10000 번 실행하면 많은 시간이 걸릴 것입니다.

데이터를 일반 변수에 쓰면 List 또는 StringBuilder가 RAM에 저장됩니다 (매우 빠른 메모리). 표시를 업데이트 할 필요가 없기 때문에 훨씬 빠릅니다.

화면마다 몇 마이크로 초를 업데이트하려고하지 마십시오, 그것의 불가능 :

+0

감사합니다. NikolaD에서 StringBuilder를 사용해 보겠습니다. 그럼 내가 여기에 게시 할 때 훨씬 더 빠르다. –

+0

네, 대용량 파일을 위해 생각했던 것보다 훨씬 빠릅니다. –

관련 문제