Я хочу, чтобы пользователь выделил строку в WPF DataGrid и нажмите клавишу удаления, чтобы удалить строку.Что такое событие «нажатие кнопки удаления» для WPF Datagrid?
- функциональность уже встроена в UI сетки, так что пользователю, то строка исчезает
- я в настоящее время справиться с этим на событие SelectionChanged (код ниже)
- Я петли через все «e.RemovedItems» и удалите их с помощью LINQ
Проблема: даже когда вы просто себе вывести строку и перейти от нее, сменить выделение и эта строка находится в e.RemovedItems (что странно, почему бы просто выбрать что-то, помещенное в контейнер RemovedItems?).
Итак, я ищу УдалитьKeyPressed, поэтому я могу просто обработать его. Что называется этим событием?
Я использую инструментарий March 2009.
XAML:
<Grid DockPanel.Dock="Bottom">
<toolkit:DataGrid x:Name="TheDataGrid"
SelectionChanged="TheDataGrid_SelectionChanged"
AutoGenerateColumns="True"
RowEditEnding="TheDataGrid_RowEditEnding"/>
фоновым кодом:
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;
}
}
ОТВЕТ:
Благодаря lnferis, это было именно то, что я искал, здесь это мое завершенное событие обработки удаления для datagrid обратите внимание, что событие KeyDown по какой-то причине не срабатывает.
XAML:
<toolkit:DataGrid x:Name="TheDataGrid"
KeyDown="TheDataGrid_KeyDown"
PreviewKeyDown="TheDataGrid_PreviewKeyDown"
AutoGenerateColumns="True"
RowEditEnding="TheDataGrid_RowEditEnding"/>
кода за
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 никогда не должен добираться сюда, потому что это уже обработчик (e.Handled = true) в предыдущем обработчике в пузырьке. – Shimmy