Tôi có một WPF DataGrid theDataGrid
bị ràng buộc với một DataSet ds
có chứa một bảng. Tôi muốn cho phép người sử dụng để loại bỏ các dòng bằng cách đầu tiên chọn chúng trong lưới điện và sau đó nhấn một nút (vị trí somwhere bên ngoài của DataGrid). Cuối cùng tôi đến các dòng mã sau đây mà làm những gì tôi muốn, nhưng mà tôi cân nhắc khá xấu xí:Xóa các hàng khỏi bảng dữ liệu WPF
DataSet ds = new DataSet();
...
// fill ds somehow
...
private void ButtonClickHandler(object Sender, RoutedEventArgs e)
{
List<DataRow> theRows = new List<DataRow>();
for (int i = 0; i < theDataGrid.SelectedItems.Count; ++i)
{
// o is only introduced to be able to inspect it during debugging
Object o = theDataGrid.SelectedItems[i];
if (o != CollectionView.NewItemPlaceholder)
{
DataRowView r = (DataRowView)o;
theRows.Add(r.Row);
}
}
foreach(DataRow r in theRows)
{
int k = ds.Tables["producer"].Rows.IndexOf(r);
// don't remove() but delete() cause of update later on
ds.Tables[0].Rows[k].Delete();
}
}
Có cách nào tốt hơn để làm điều này? Ví dụ. một trong đó chỉ cần một vòng lặp và không cần phải kiểm tra NewItemPlaceHolder
một cách rõ ràng, hoặc có thể một cách hiệu quả hơn để truy cập vào các hàng sẽ bị xóa?
(Tôi đã tìm ra rằng tôi không phải loại bỏ bất cứ điều gì từ ds trong vòng lặp đầu tiên, kể từ đó theDataGrid.SelectedItems.Count
thay đổi mọi vòng lặp được thực hiện ...)
tôi có giải pháp nào bạn muốn tôi thêm nó ?? – gasroot