2009-10-19 2 views
1

SQL 데이터베이스에서 행을 읽고 datagridview에 표시하는 프로젝트가 있습니다. 그 부분은 훌륭하게 작동합니다. 그리드에서 선택되지 않은 모든 행을 삭제하여 이러한 레코드의 하위 집합을 표시하려고합니다. 이 코드입니다 :언 바운드 datagridview에서 여러 행 삭제

foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    if (!row.Selected) 
    { 
     if (!row.IsNewRow) 
     { 
       dataGridView1.Rows.Remove(row); 
      //dataGridView1.Rows.Remove(dataGridView1.CurrentRow); 
     } 
    }  
} 

그것은 선택된 영역까지 바닥에서 삭제 중 하나 이상 선택되지 않은 행을 잎, 또는 선택되지 않은 행뿐만 아니라 선택 삭제합니다.

는 사람이 올바른 방향으로 날 지점 수 있을까요?

답변

0

다른 요소가 제거되면서 행이 변경되므로 일부 요소가 잘못 건너 뜁니다.

두 번째 루프를 사용할 수 있습니다. 첫 번째는 선택한 항목을 반전하고 두 번째는 선택한 항목 (반전하기 전에 이전에 선택하지 않은 항목)을 삭제합니다.

foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    // invert row selections 
    if (!row.Selected) 
    { 
     if (!row.IsNewRow) 
     { 
      row.Selected = true; 
     } 
    } 
    else 
    { 
     row.Selected = false; 
    } 
} 

// remove selected rows 
foreach (DataGridViewRow row in dataGridView1.SelectedRows) 
{ 
    dataGridView1.Rows.Remove(row); 
} 
관련 문제