Entity Core Framework - Item aus Datagrid löschen

  • WPF

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von OlafMS.

    Entity Core Framework - Item aus Datagrid löschen

    Guten Abend,

    ich bin dabei, Entity Core 5 zu lernen und habe ein Problem.

    Über ein WPF-DataGrid möchte ich einen Eintrag löschen.
    Dafür habe ich das Datagrid wie folgt gefüllt:

    Quellcode

    1. ​ Dim _View = ObservableCollection(Of Kunden)(
    2. From ctx.Kunden
    3. Where ......
    4. Order BY.......)
    5. Datagrid.DataContext = _View

    Um einen Eintrag aus dem Datagrid zu löschen habe ich

    Quellcode

    1. ​ If Not IsNothing(Datagrid.SelectedItem)
    2. Dim _Kunde as Kunden = TryCast(Datagrid.SelectedItem, Kunden)
    3. Using ctx.NewModel()
    4. ctx.Remove(_Kunde)
    5. ctx.SaveChanges()
    6. End Using


    Jetzt ist der Eintrag gelöscht, aber wird in der _View weiter angezeigt.
    Ich könnte jetzt mit

    Quellcode

    1. _View.Remove(_Kunde)

    auch die Sicht aktualisieren.

    Es gibt sicher bessere Ansätze!?

    Olaf
    Hallo

    Ja, du löscht den Datensatz, aber in ddr ObservableCollection ist er ja weiterhin enthalten, also musst du ihn auch dort löschen. Ist also so richtig von dir.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo

    Das wäre eine schlechte Idee, ist mit Umwegen möglich, meiner Erfahrung nach bringt sowas aber oft mehr Probleme als es löst.
    Mein Ansatz ist oft folgender:

    Du Abonnierst einen Handler auf das CollectionChanged Ereignis der ObservableCollection. In dessen Eventargs bekommst du Infos darüber welche Aktion gerade stattgefunden hat.
    Also Added, Deleted,.....

    Weiters bekommst du die Item(s) welche z.b. gelöscht wurden. Dies nimmst du her um die Items auch im Context zu löschen. Das selbe natürlich für Added usw auch.

    Was Änderungen betrifft würde ich an deiner Stelle den Context offen lassen und beim schließen des Fensters erst Disposen. So ist der ChangeTracker von EF "dabei" und du musst lediglich SaveChanges() aufrufen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi,
    dafür ist das ViewModel da.
    mach Dir da ne Methode ReLoadData() in der lädst Du die Daten aus der DB und fügst Sie der Collection zu.
    Beim Hinzufügen, Ändern und Löschen kannst Du die Methode aufrufen und die View aktualisiert sich.
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    kannst Du die Methode aufrufen und die View aktualisiert sich

    Da sehe ich leider zwei Probleme.
    Zum einen die Performance, da immer alle Daten neu abgerufen werden müssen und zum anderen weil du dadurch auch z.b. das SelectedItem verlierst.
    Wenn ein User die Zeile 10 editiert will er nach dem speichern nicht wieder neu selektieren. Noch schlimmer wäre es für den User wenn er z.b. gescrollt hat um einen Datensatz zu finden.

    Da ist es eleganter wenn die ObservableCollection einfach den Context syncronisiert. Abgesehen davon das ich die Methode gerne verwende um zu loggen.
    Bleibt ja eh alles im ViewModel.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##