WPF Datagrid row Editing "ENDED" event

je sais que WPF datagrid a un événement "RowEditEnding", mais j'ai besoin de lancer l'événement après que la rangée soit entrée pour vérifier si la rangée nouvellement ajoutée est dupliquée et fusionner la rangée dupliquée. La propriété "CanUserAddRow" de mon datagrid est définie à True.

J'utilise EntityObservableCollection qui étend ObservableCollection pour synchroniser mon entity avec la collection. Ainsi, j'ai considéré un événement Modifiéuncollection, mais l'événement "InsertItem" est soulevé une fois que l'utilisateur clique sur le nouvel élément place holder row, ce qui signifie que l'objet est toujours vide et que je ne peux pas vérifier s'il y a un double.

y a-t-il quoi qu'il en soit que je puisse soulever L'événement RowEditEnded?

Merci...

24
demandé sur Alex 2010-10-15 02:17:45

7 réponses

    private void dgrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
    {
        if (this.dgrid.SelectedItem != null)
        {
            (sender as DataGrid).RowEditEnding -=dgrid_RowEditEnding;
            (sender as DataGrid).CommitEdit();
            (sender as DataGrid).Items.Refresh();
            (sender as DataGrid).RowEditEnding += dgrid_RowEditEnding;
        }
        else Return;

       //then check if the newly added row is duplicated
    }
24
répondu Maher Ben Issa 2013-12-15 14:06:38

condition if (E. EditAction = = DataGridEditAction.Commit) dans le RowEditEnding remplira ur exigence

veuillez consulter le code ci-dessous.

private void dataGrid1_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
    if (e.EditAction == DataGridEditAction.Commit)
    {
        MessageBox.Show("asd");
    }
}

C'est le XAML derrière.

<DataGrid AutoGenerateColumns="False" CanUserAddRows="True" Height="241" 
    RowEditEnding="dataGrid1_RowEditEnding" HorizontalAlignment="Left" 
    Name="dataGrid1" VerticalAlignment="Top" Width="573" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="name" Binding="{Binding id}" 
            Width="300">
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>
2
répondu M Usman Shahid 2013-11-09 00:42:19

D'après la réponse de @MaherBenIssa, j'ai utilisé ceci pour éviter d'ajouter et de supprimer le délégué:

    private bool locker = true;

    private void dgArticles_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
    {
        if (locker)
        {
            try{
                locker = false;
                (sender as DataGrid).CommitEdit(DataGridEditingUnit.Row, false);
                ((sender as FrameworkElement).DataContext as ViewModel)?.Edit(e.Row.DataContext);
            }
            finally{
               locker = true; //enable editing again
            }
        }
    }
1
répondu Ozzy 2017-11-30 16:32:09

essayez de configurer la fonction CommitEdit () pour votre datagrid. Je l'ai utilisé ici:

private void DataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
{
    this.MyDataGrid.CommitEdit(DataGridEditingUnit.Row, false);
}
0
répondu allthingscs 2011-03-21 17:53:00

je me demande pourquoi vous trouvez le moyen d'augmenter L'événement RowEditEnded; si vous implémenter l'événement RowEditEnding de datagrid; chaque fois que vous éditez une ligne et changez le focus de cette ligne, la ligne sera engagée et RowEditEnding sera augmentée;

ainsi, après que la rangée s'est engagée RowEditEnding sera augmenté et fonctionne tout comme RowEditEnded;

ai-je mal compris quelque chose dans votre message?

0
répondu mohammad jannesary 2013-08-06 21:39:44

VB.NET solution à la solution de @ MaherBenIssa

Private Sub dgLayer_RowEditEnding(sender As Object, e As DataGridRowEditEndingEventArgs)

    Dim d As DataGrid
    d = DirectCast(sender, DataGrid)

    RemoveHandler d.RowEditEnding, AddressOf dgLayer_RowEditEnding

    dgLayer.CommitEdit()
    sender.Items.Refresh()

    AddHandler d.RowEditEnding, AddressOf dgLayer_RowEditEnding

End Sub
0
répondu DrMarbuse 2017-08-22 13:08:43

Vous pouvez utiliser UpdateSourceTrigger=PropertyChanged sur la liaison du membre de propriété pour le datagrid. Cela permettra d'assurer que lorsque https://stackoverflow.com/a/27239243/9285072

0
répondu Shloime Rosenblum 2018-04-20 19:55:01