2011-08-01 3 views
5

.. 내가있는 DataGridView에서 삭제를 마우스 오른쪽 버튼으로 클릭에 하나의 행을 삭제하는 기능을 가지고있는 DataGridView

코드 여러 행을 삭제

private void dataGridView1_MouseDown(object sender, MouseEventArgs e) 
    { 

      if (e.Button == MouseButtons.Right) 
      { 
       var hti = dataGridView1.HitTest(e.X, e.Y); 
       if (hti.RowIndex != -1) 
       { 
        dataGridView1.ClearSelection(); 
        dataGridView1.Rows[hti.RowIndex].Selected = true; 
       } 
      }   
    } 

    private void DeleteRow_Click(object sender, EventArgs e) 
    { 
      Int32 rowToDelete = dataGridView1.Rows.GetFirstRow(DataGridViewElementStates.Selected); 
      if (rowToDelete != -1) 
      { 
       dataGridView1.Rows.RemoveAt(rowToDelete); 
       dataGridView1.ClearSelection(); 
      }   
    } 

을하지만 지금은 선택에 여러 행을 삭제할.
먼저 여러 행을 선택할 수없는 이유를 알 수 없습니다.
두 번째 삭제 버튼을 사용하여 여러 개의 삭제를 삭제하고 마우스 오른쪽 버튼을 클릭하여 삭제하려고합니다.

나를 도와 줄 사람이 있습니까?

답변

10

편집 : 코드를 살펴보십시오. HitTest 메소드의 결과에 따라 선택한 행을 설정 중입니다. DataGridView 속성 SelectedRows은 선택된 행을 결정합니다. HitTest을 실행해야하는 이유를 모르지만 다시 원하는 기능을 완전히 설명하지 않은 것일 수 있습니다.

if (e.Button == MouseButtons.Right) 
{ 
    var hti = dataGridView1.HitTest(e.X, e.Y); 
    if (hti.RowIndex != -1) 
    { 
     dataGridView1.ClearSelection(); 
     dataGridView1.Rows[hti.RowIndex].Selected = true; 
    } 
} 

MultiSelect 속성이 당신의 데이터 그리드에 true로 설정되어 있는지 확인합니다.

foreach (DataGridViewRow row in DataGridView1.SelectedRows) 
{ 
    DataGridView1.Rows.Remove(row); 
} 
+0

복수 선택 작동 ..하지만 오른쪽 클릭 삭제 ... 여러 행을 선택하고 마우스 오른쪽 단추로 하나만 선택하면 ... 왜 이런 일이 발생합니까? – user175084

+1

DataGrid의'SelectionMode' 속성을 확인 했습니까? 셀뿐만 아니라 전체 행을 선택 하시겠습니까? –

+0

예 셀만이 아닌 전체 행을 선택하고 있습니다. 선택 모드는 어디에 있습니까? ?? 덕분에 – user175084

3

다음과 같은 경우 관심을하시기 바랍니다 :

그런 다음, 당신이 당신의 선택의 이벤트에 SelectedRows 속성을 활용할 수 있습니다 당신은 데이터 그리드에서 레코드를 삭제해야하는 경우

을 은하지 않습니다 그냥 대신에 datagrid에 rowIndex를 저장하십시오 (대신 DB에 해당 키를 저장해야합니다) :

예 : 1 행을 삭제하려면 2, DataGrid에 rowIndex를 저장했습니다. 행 1이 DataGrid에서 삭제 된 후 2 행의 데이터가 1 ​​행으로 이동하고 행 3의 데이터가 행 2로 이동합니다 ( ). 데이터 테이블 rowIndex를 사용하여 삭제할 데이터를 찾았 기 때문에 , 결과 : data1과 data3이 마지막으로 삭제됩니다.

관련 문제