2009-10-13 24 views
5

Trong mã của tôi, tôi cần phải loại bỏ các hàng từ DataGridView sau một khoảng thời gian định kỳ, và vì vậy tôi gọi hàm sau khi một bộ đếm thời gian hết hạn:C# - làm thế nào để tôi làm mới DataGridView sau khi gỡ bỏ hàng

private void removeRows(DataGridView dgv) { 

    foreach (DataGridViewRow row in dgv.Rows) 
    { 
     // if some condition holds 
     dgv.Remove(row);     
    } 
    dgv.Refresh(); 

} 

tôi biết các hàng được xóa thành công khỏi DataGridView, mặc dù chúng vẫn còn trong màn hình vì bất kỳ lý do gì. Bất kỳ lời khuyên về những gì tôi có thể làm sai?

Trả lời

2

Nếu bạn đã ràng buộc dữ liệu của mình vào Bộ sưu tập có thể quan sát (nếu không thì bạn nên) thì bạn sẽ cần triển khai giao diện INotifyCollectionChanged để người nghe được thông báo về thay đổi động, chẳng hạn như khi các mục được thêm và xóa hoặc toàn bộ danh sách được làm mới.

HTH

+0

xin lỗi, không quen thuộc với điều đó (C# newbie). Bạn có thể mở rộng một chút không? cảm ơn. – sa125

+0

Xin chào, nếu bạn chỉnh sửa bài đăng của mình và thêm một số thông tin về cách bạn đang tạo nguồn dữ liệu, thì có thể tôi có thể giúp bạn với một số gợi ý. Chúc mừng. –

3

Bạn không cần phải khôi phục lưới dữ liệu?

dgrv.Datasource = [whatever data source]; 
dgrv.DataBind(); 

?

+1

DataGridView là một điều khiển winforms, do đó dữ liệu không cần thiết. Nếu đó là ASP .NET, trong ví dụ loại bỏ các hàng của mình không ảnh hưởng đến nguồn dữ liệu. Do đó làm điều này sẽ làm cho GridView hiển thị cùng một dữ liệu trước khi loại bỏ chúng. –

1

Nếu đó là lưới bị ràng buộc dữ liệu, bạn nên làm việc trên chính nguồn ràng buộc thay vì lưới.

1

Đôi khi làm mới lưới xem dữ liệu chưa đủ và cha mẹ chứa cũng nên được làm mới.

Hãy thử điều này:

dgv.Refresh(); // Make sure this comes first 
dgv.Parent.Refresh(); // Make sure this comes second 

Bạn cũng có thể chỉnh sửa mã nguồn của bạn và đính kèm các nguồn dữ liệu mới để kiểm soát.

0

Hãy thử xóa các mục thực tế khỏi nguồn ràng buộc của bạn thay thế.

2

Nếu tôi hiểu chính xác bạn, bạn muốn xóa các hàng do người dùng chọn từ DGV của bạn.

  1. Sử dụng DataGridViewRowCollection của DGV thay vì DataRowCollection của DataTable. DataGridViewRow có thuộc tính Selected cho biết một hàng được chọn hay không.

  2. Khi bạn đã xác định rằng một hàng sẽ bị xóa, bạn có thể sử dụng phương pháp Xóa của DataGridViewRowCollection để xóa mục khỏi lưới, ví dụ: YerDataGridView.Rows.Remove (hàng)

  3. Lưu ý rằng tại thời điểm này, mặc dù mục này bị xóa khỏi DGV, nó vẫn chưa bị xóa khỏi Access DB. Bạn cần phải gọi phương thức Cập nhật TableAdapter trên DataSet/DataTable của bạn để thực hiện việc xóa đối với DB, ví dụ: YerTableAdapter.Update (YerDataSet)

Tôi thường gọi Update chỉ để thực hiện thay đổi sau khi đã xóa tất cả các mục sẽ bị xóa khỏi DGV.

1
 dataGridView.DataSource = null; 
     dataGridView.Update(); 
     dataGridView.Refresh(); 
     dataGridView.DataSource = SomeDataSource; 

Mong các con này.