Supprimer une ligne dans WPF DataGrid
J'ai un datagrid avec une icône de suppression de la colonne et l'icône de mise à jour comme un autre de la colonne. Sur cliquez de mise à jour, la première cellule est définie sur l'objet.
Sur cliquez sur supprimer, je veux supprimer la ligne sélectionnée, mais je reçois l'erreur "l'Opération n'est pas valide alors que ItemsSource est en cours d'utilisation. L'accès et la modification des éléments avec ItemsControl.ItemsSource à la place." avec le code suivant:
XAML:
<DataGrid Name="grdList" Margin="3,16,0,5" RowHeight="30" ColumnWidth="*"
ItemsSource="{Binding List,Mode=TwoWay}" Width="434"
AutoGenerateColumns="False"
CanUserAddRows="False" AlternatingRowBackground="#FFB9BBFF">
<DataGrid.Columns>
<DataGridTextColumn MinWidth="0" Header="Property"
Binding="{Binding Path=Property}"/>
<DataGridTemplateColumn Header="Update" MinWidth="50" MaxWidth="50">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<EventSetter Event="PreviewMouseLeftButtonDown"
Handler="EventSetter_OnHandler"/>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="Icons/Update.jpg"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Delete" MinWidth="50" MaxWidth="50">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<EventSetter Event="PreviewMouseLeftButtonDown"
Handler="EventSetter_OnHandler"/>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="Icons/Delete.jpg"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
C#:
private void EventSetter_OnHandler(object sender, MouseButtonEventArgs e)
{
object source = e.OriginalSource;
if (source.GetType() == typeof(Image))
{
grdList.IsReadOnly = false;
selectedRow = FindParent<DataGridRow>(sender as DependencyObject);
if (((DataGridCell)sender).Column.Header.ToString().ToUpperInvariant() == "DELETE")
{
grdList.Items.Remove(selectedRow);
}
else
{
DataGridCellsPanel panel = FindVisualChild<DataGridCellsPanel>(selectedRow);
DataGridCell dgc = panel.Children[0] as DataGridCell;
dgc.Focus();
grdList.BeginEdit();
e.Handled = true;
}
}
}
Également Comment ajouter la fonction supprimer avec la touche "Suppr" ensemble avec le clic sur la suppression de la cellule.
Vous devez vous connecter pour publier un commentaire.
Je soupçonne que sur
Delete
c'est à dire dansEventSetter_OnHandler
, vous devez être la suppression d'éléments de laItems
collection de grille de données. Quelque chose comme ceci:Mais comme l'erreur est explicite
Vous avez lié ItemsSource de certains collection, alors vous devez supprimer un élément à partir d'elle. Vous ne pouvez pas modifier les Éléments de la collection directement lors de la liaison ItemsSource avec certains de la collection. Il doit être quelque chose comme:
Vous pouvez lier le SelectedItem de votre
DataGrid
à une propriété. Ensuite, vous pouvez appelerSelectedDataGridItem est la propriété lequel l'Élément Sélectionné est lié à
Essayer cela,
J'ai eu le même Problème, je l'ai résolu de la sorte: