Tôi muốn cho phép người dùng đánh dấu một hàng trên DataFrid WPF và nhấn phím xóa để xóa hàng.Sự kiện "nhấn phím xóa" cho DataGrid WPF là gì?
- các chức năng đã là được xây dựng vào UI của lưới điện, vì vậy cho người dùng, hàng biến mất
- Tôi hiện xử lý này trên các sự kiện SelectionChanged (mã dưới đây)
- Tôi lặp qua tất cả các "e.RemovedItems" và xóa chúng với LINQ
vấn đề là: ngay cả khi bạn chỉ đơn giản là se Bài giảng một hàng và di chuyển ra khỏi nó, thay đổi lựa chọn được bắn và hàng đó là trong e.RemovedItems (đó là lẻ, tại sao chỉ đơn giản là chọn một cái gì đó đặt nó trong một container RemovedItems?).
Vì vậy, tôi đang tìm kiếm một sự kiện DeleteKeyPressed để tôi có thể dễ dàng xử lý sự kiện. Sự kiện đó được gọi là gì?
Tôi đang sử dụng bộ công cụ tháng 3 năm 2009.
XAML:
<Grid DockPanel.Dock="Bottom">
<toolkit:DataGrid x:Name="TheDataGrid"
SelectionChanged="TheDataGrid_SelectionChanged"
AutoGenerateColumns="True"
RowEditEnding="TheDataGrid_RowEditEnding"/>
code-behind:
private void TheDataGrid_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
if (e.RemovedItems.Count > 0)
{
Message.Text = "The following were removed: ";
foreach (object obj in e.RemovedItems)
{
Customer customer = obj as Customer;
Message.Text += customer.ContactName + ",";
_db.Order_Details.DeleteAllOnSubmit(
customer.Orders.SelectMany(o => o.Order_Details));
_db.Orders.DeleteAllOnSubmit(customer.Orders);
_db.Customers.DeleteOnSubmit(customer);
}
}
try
{
_db.SubmitChanges();
}
catch (Exception ex)
{
Message.Text = ex.Message;
}
}
ĐÁP:
Cảm ơn lnferis, đó là chính xác những gì tôi đang tìm kiếm, đây là sự kiện xử lý xóa xong của tôi cho DataGrid, lưu ý sự kiện KeyDown không kích hoạt vì một số lý do.
XAML:
<toolkit:DataGrid x:Name="TheDataGrid"
KeyDown="TheDataGrid_KeyDown"
PreviewKeyDown="TheDataGrid_PreviewKeyDown"
AutoGenerateColumns="True"
RowEditEnding="TheDataGrid_RowEditEnding"/>
code-behind
private void TheDataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
var grid = (DataGrid)sender;
if (grid.SelectedItems.Count > 0)
{
string checkMessage = "The following will be removed: ";
foreach (var row in grid.SelectedItems)
{
Customer customer = row as Customer;
checkMessage += customer.ContactName + ",";
}
checkMessage = Regex.Replace(checkMessage, ",$", "");
var result = MessageBox.Show(checkMessage, "Delete", MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
foreach (var row in grid.SelectedItems)
{
Customer customer = row as Customer;
_db.Order_Details.DeleteAllOnSubmit(
customer.Orders.SelectMany(o => o.Order_Details));
_db.Orders.DeleteAllOnSubmit(customer.Orders);
_db.Customers.DeleteOnSubmit(customer);
}
_db.SubmitChanges();
}
else
{
foreach (var row in grid.SelectedItems)
{
Customer customer = row as Customer;
LoadData();
_db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, customer); //TODO: this doesn't refresh the datagrid like the other instance in this code
}
}
}
}
}
private void TheDataGrid_KeyDown(object sender, KeyEventArgs e)
{
Console.WriteLine("never gets here for some reason");
}
KeyDown không bao giờ nên đến đây vì nó đã xử lý (e.Handled = true) trong trình xử lý trước đó trong bong bóng. – Shimmy