2011-08-01 160 views
5

Tôi có một chức năng để xóa hàng duy nhất trên click chuột phải xóa trong một DataGridView ..Xóa nhiều hàng trong datagridview

mã:

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(); 
      }   
    } 

nhưng bây giờ tôi muốn xóa nhiều hàng vào lựa chọn.
Đầu tiên tôi không biết tại sao tôi không thể chọn nhiều hàng.
Thứ hai Tôi muốn xóa nhiều lần xóa bằng cách sử dụng nút xóa và nhấp chuột phải vào xóa.

Ai đó có thể giúp tôi không?

Trả lời

10

Chỉnh sửa: Hãy xem mã của bạn. Bạn đang thiết lập hàng đã chọn tùy thuộc vào kết quả của phương pháp HitTest. Thuộc tính DataGridViewSelectedRows sẽ xác định những hàng nào được chọn. Không chắc chắn lý do tại sao bạn cần phải thực hiện một HitTest, nhưng sau đó một lần nữa có lẽ bạn đã không giải thích đầy đủ các chức năng mong muốn.

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; 
    } 
} 

Hãy chắc chắn rằng MultiSelect tài sản được thiết lập để true trên DataGrid của bạn.

Sau đó, bạn có thể sử dụng các SelectedRows tài sản trong trường hợp bạn chọn:

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

nhiều công việc chọn .. nhưng khi nhấp chuột phải xóa ... khi tôi chọn nhiều hàng và nhấp chuột phải, nó chỉ chọn một hàng ... tại sao điều này xảy ra – user175084

+1

Bạn đã kiểm tra thuộc tính 'SelectionMode' của datagrid? Bạn có chắc chắn bạn đang chọn hàng đầy đủ chứ không phải chỉ là một ô? –

+0

vâng tôi đang chọn hàng đầy đủ và không chỉ là một ô .. ở đâu là chế độ lựa chọn .. ?? cảm ơn – user175084

3

xin vui lòng chăm sóc các trường hợp sau đây:

nếu bạn cần để xóa các bản ghi trong DataGrid, không chỉ lưu trữ rowIndex trong datagrid, (thay vào đó bạn nên lưu trữ các khóa tương ứng trong DB):

ví dụ: Tôi muốn xóa hàng 1 và 2 trong datagrid, tôi đã lưu trữ rowIndex của chúng trong datagrid. sau hàng 1 bị xóa trong dòng dữ liệu, dữ liệu trong hàng 2 sẽ chuyển lên hàng 1 và dữ liệu trong hàng 3 sẽ chuyển lên hàng 2, vì bạn đang sử dụng hàng dữ liệu để xác định dữ liệu cần xóa, do đó, kết quả: dữ liệu1 và dữ liệu3 sẽ bị xóa cuối cùng.

Các vấn đề liên quan