Je souhaite activer l'utilisateur pour mettre en surbrillance une ligne sur le DataGrid WPF et appuyez sur la touche de suppression pour supprimer la ligne.Qu'est-ce que l'événement "a enfoncé la touche de suppression" pour le Datagrid WPF?
- la fonctionnalité est déjà intégré dans l'interface utilisateur de la grille, de sorte à l'utilisateur, la ligne disparaît
- I poignée en ce sur l'événement SelectionChanged (Code ci-dessous)
- de boucle I par tous les « e.RemovedItems » et les supprimer avec LINQ
problème est: même lorsque vous simplement se lect une ligne et en sortir, le changement de sélection est déclenché et cette ligne est dans e.RemovedItems (ce qui est étrange, pourquoi choisir simplement quelque chose le mettre dans un conteneur RemovedItems?).
Je suis donc à la recherche d'un événement DeleteKeyPressed afin que je puisse simplement le gérer. Comment s'appelle cet événement? J'utilise la boîte à outils de mars 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;
}
}
RÉPONSE:
Merci lnferis, qui était exactement ce que je cherchais, ici est mon événement de gestion des suppressions terminé pour la grille de données, notez que l'événement KeyDown ne se déclenche pas pour une raison quelconque.
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");
}
Le KeyDown devrait jamais ici, car il est déjà gestionnaire (e.Handled = true) dans le gestionnaire précédent dans la bulle. – Shimmy