2010-05-13 3 views
1

내 winform에 datagridview가 있습니다. DataGridview에 레코드를 표시하고 있습니다. 이제 datagridview에 레코드를 표시 한 후 해당 행의 셀에 값이없는 하나 이상의 empy 셀이있는 datagridview에서 행을 제거하려고합니다. 그래서 모든 셀이 비어 있거나 null 인 경우 모든 행에 대해 각 셀을 검사하기 때문에 RemoveAt() 함수를 사용하여 해당 행을 제거합니다.하나 이상의 빈 또는 널 셀이있는 행을 제거하는 방법은 무엇입니까?

내 코드는 다음과 같습니다

for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) 
      { 
       for (int j = 0; j < dataGridView1.Columns.Count; j++) 
       { 
        if (string.IsNullOrEmpty(dataGridView1.Rows[i].Cells[j].Value.ToString())) 
        { 
         dataGridView1.Rows.RemoveAt(i); 
         break; 
        } 
       } 
      } 

그런 문제는 그것이 빈 셀을 가지고 모든 행을 제거하지 않는 것을 제대로 작동하지 않는 것입니다. 그럼 여기서 뭘해야하지?

+0

여기에서 질문하지 않습니다. 실제 질문으로 끝내지 마라. – Oded

+0

@ Oded, 죄송합니다, 이해가 안됩니다. 왜 그걸 닫을까요? – Harikrishna

+0

@Oded - 질문이 무엇인지 꽤 분명합니다. OP는 DataGrid 뷰에서 둘 이상의 행을 제거하려고합니다. –

답변

2

원하는 작업을 수행하는 가장 간단한 방법은 반대 방향으로 datagridview 행을 반복하는 것입니다. 이렇게하면 색인이 정확합니다.

for (int i = dataGridView1.Rows.Count -1; i >= 0; i--) 
{ 
    DataGridViewRow dataGridViewRow = dataGridView1.Rows[i]; 

    foreach (DataGridViewCell cell in dataGridViewRow.Cells) 
    { 
     string val = cell.Value as string; 
     if (string.IsNullOrEmpty(val)) 
     { 
      if (!dataGridViewRow.IsNewRow) 
      { 
       dataGridView1.Rows.Remove(dataGridViewRow); 
       break; 
      } 
     }    
    } 
} 

난 당신이 (코드 그냥 잘라 내 테스트 응용 프로그램에서 붙여)

  • 나는 보통에 해당 행을 잡아 할 필요가 없습니다 수 있습니다 여분의 몇 가지를하고 있어요 DataGridViewRow 개체
  • 그리드가 편집 가능하기 때문에 IsNewRow 속성을 확인하고 있습니다.
  • 문자열 변수에 값을 할당하려고합니다 (예 : as). 예외를 던지고있는 방식대로 값을 지정합니다.
+0

@David Hall,하지만이 모든 행을 제거합니다. – Harikrishna

+0

@Harikrishna - 위의 코드는 빈 셀을 검사하지 않지만 이미 가지고있는 코드는 확인합니다. 나는 행을 제거 할 때 인덱스 변경에 대처하는 방법을 설명했습니다. –

+0

이 최신 편집에는 빈 셀을 확인하는 코드가 있습니다. 확인란이나 콤보 상자와 같은 다른 열 유형에서 문제가 발생할 가능성이 높지만 이러한 문제를 해결해야합니다. –

관련 문제