Datagrid Source per Button-Klick aktualisieren

  • WPF

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Lubeca.

    Datagrid Source per Button-Klick aktualisieren

    Hallo zusammen,
    Ich habe eine Textbox gebunden an MySettings.QT und ein DataGrid mit verschiedenen Spalten die an ein DataSet bzw an die Spalte eines DataTables gebunden sind.
    Wenn ich jetzt den Butten "OK" drücke, sollen die geänderten Daten an das DataSet übergeben werden. Bei Abbrechen nicht.
    Bei beiden Bindings habe ich "Mode=TwoWay, UpdateSourceTrigger=Explicit" eingestellt.
    Im VB-Code dazu habe ich in Button_Click für die TextBox die UpdateSource Methode von GetbindingExpression angewendet.
    Wie mache ich das für das Datagrid?

    XML-Quellcode

    1. ...
    2. <TextBox x:Name="TB1" Text="{Binding QT, Mode= TwoWay, UpdateSourceTrigger=Explicit}">
    3. <TextBox.DataContext>
    4. <MySettings/>
    5. </TextBox.DataContext>
    6. </TextBox>
    7. ...
    8. <DataGrid x:Name="DG1">
    9. <DataGrid.Columns>
    10. <DataGridTextColumn x:Name="DGTC_1" Binding="{Binding DSSpalte1, Modes=TwoWay, UpdateSourceTrigger=Explicit}" Header="Spalte1"/>
    11. ....
    12. </DataGrid.Columns>
    13. </DataGrid>


    VB.NET-Quellcode

    1. Private Sub BtnOK_Click(sender As Object, e As RoutedEventArgs) Handles BtnOK_Click
    2. Me.TxtB1.GetBindingExpression(TextBox.TextProperty).UpdateSource()
    3. 'Hier nun für das Datagrid
    4. Me.DialogResult = True
    5. End Sub


    Tschüßi Lubeca
    Hallo HamburgerJungeJr,
    so aufwändig wollte ich das Projekt gar nicht gestalten.
    Nur zwei Fenster ein DataSet mit ein paar Daten. In dem ersten Fenster gucke ich mir die Daten nur an und in dem zweiten Fenster kann ich die Daten ändern.
    Die Änderungen sollten aber nur übernommen werden, wenn ich den Ok-Button betätige sonst bleibt alles so wie es ist, auch wenn ich vorher etwas in der Tabelle geändert habe. die Textbox dient zur Eingabe der Xml-QuellDatei für das DataGrid. Somit kann ich mir auch andere Daten angucken und bearbeiten bzw. die geänderten Daten in eine andere Datei schreiben. Bei Schließen des Programm wird das aktuelle DataSet wieder in die angegebene Xml-QuellDatei zurück geschrieben. Ohne großen Aufwand. Nur klapp das Aktualisieren des Datasets von geänderten Datagrid nicht auf Knopfdruck wie bei der Textbox.

    Vielleicht weiß ja doch jemand, wie ich das hinbekomme, ohne jetzt so viel Code wie für das MVVM nötig ist zu schreiben.

    Tschüßi Lubeca
    nach meinem Versuch hat der UpdateSourceTrigger im Binding einer DG-Column keine Wirkung.

    Scheinbar steuert das DG selbst, wann geupdatet wird, nämlich beim Wechsel des Datensatzes wird geupdated. Da wird nämlich intern CollectionView.CommitEdit aufgerufen, und geupdated ist.
    Man kann auch Canceln, mit CollectionView.CancelEdit, aber diese Methoden wirken beide nur auf die aktuelle Zeile.
    Die Übernahme aller Änderungen einer ganzen Spalte canceln (und nur dieser Spalte) geht glaub nicht.

    Man kann allenfalls die Daten vor der Bearbeitung komplett abspeichern. Wenn man dann nach Bearbeitung Dataset.RejectChanges aufruft, so geht das Dataset auf den vorherigen Abspeicher-Zustand zurück.

    Also die Änderung eines einzelnen Datensatzes kann man canceln (mittels Databinding), oder alle Änderungen überhaupt rückgängig machen (mittels Dataset-Änderungsverfolgung).
    Okay, dann muss ich eben eine andere Art finden um die Bearbeitung rückgängig zu machen.
    Ich hatte nur gedacht, dass UpdateSourceTrigger sich überall benutzen lässt.
    Vielleicht findet sich ja noch eine einfache Lösung.
    Danke erstmal für die Hilfe.

    Tschüßi Lubeca