2017-11-06 7 views
-1

내 표는DataGridview에서 행을 제거하는 방법은 무엇입니까?</p> <pre><code>Joe Sue 200 </code></pre> <p>한 행 :

Joe   Jackson   200 
Jackson  Sue    200 

내 코드

for (int i = 0; i < dataGridView1.RowCount; i++) 
{ 
    for (int j = 1; j < dataGridView1.RowCount; j++) 
    { 
     if (dataGridView1.Rows[i].Cells[1].Value == dataGridView1.Rows[j].Cells[0].Value) 
     { 
      int miktar_alici = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value); 
      int miktar_satici = Convert.ToInt32(dataGridView1.Rows[j].Cells[2].Value); 
      if (miktar_alici == miktar_satici) 
      { 
       dataGridView1.Rows[j].Cells[0].Value = dataGridView1.Rows[i].Cells[0].Value; 
       dataGridView1.Rows.RemoveAt(dataGridView1.Rows[i].Index); 
      } 

     } 
    } 
} 

는이 같은 출력 뭔가 내 코드를 원하는 것입니다. 그러나 코드에는 "RemoveAt"줄의 오류가 있습니다. 어떻게 해결할 수 있습니까?

+2

어떤 오류가 발생합니까? 아니면 야생 추측을하기를 원하십니까? –

+0

'RowCount'는 행을 제거 할 때마다 감소하지만 iterator (i, j)는 계속 증가하므로 결국 존재하지 않는 행 인덱스에 액세스하려고 시도합니다. 또한, 당신은 중첩 된 루프에서 셀을 반복하고 행을 다시 반복 할 필요가 있다고 생각합니다. – Crowcoder

+0

내 오류 : System.Windows.Forms.dll에서 'System.InvalidOperationException'형식의 처리되지 않은 예외가 발생했습니다. 추가 정보 : 저장하지 않은 새 줄을 삭제할 수 없습니다. –

답변

0

그리드에서 행을 제거하려는 경우 끝에서 반복하는 대신 처음부터 반복하는 것보다 문제가 더 큽니다.

의 당신이 이런 짓을 가정 해 봅시다 :

for (int i = dataGridView1.RowCount - 1; i > 0; i--) 
{ 
    for (int j = dataGridView1.RowCount - 2; j >= 0; j--) 
    { 
     if (dataGridView1.Rows[i].Cells[1].Value == dataGridView1.Rows[j].Cells[0].Value) 
     { 
      int miktar_alici = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value); 
      int miktar_satici = Convert.ToInt32(dataGridView1.Rows[j].Cells[2].Value); 
      if (miktar_alici == miktar_satici) 
      { 
       dataGridView1.Rows[j].Cells[0].Value = dataGridView1.Rows[i].Cells[0].Value; 
       dataGridView1.Rows.RemoveAt(dataGridView1.Rows[i].Index); 
      } 
     } 
    } 
} 

음이 나는 거의 그리드의 모든 행을 제거하려고하는 것을 말씀 드릴 수 있습니다.

사실, 모든 행을 제외하고는 모든 행을 반복하지만 그 중 마지막 행은 j이므로이 범위의 모든 i에 대해 i == j이 반복됩니다.

따라서 miktar_alicimiktar_satici과 같으며 행을 제거합니다.

결국 마지막 행만 유지되며 원하는 동작이 아닌 것으로 확신합니다.

이제 을 j으로 사용하는 대신 i - 1부터 시작해야합니다. 이 방법을 사용하면 이전에 반복 한 행을 i으로 반복 비교하지 않으므로 i == j을 가질 수 없습니다.

for (int i = dataGridView1.RowCount - 1; i > 0; i--) 
{ 
    for (int j = i - 1; j >= 0; j--) 
    {