myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » Wie aktualisiere ich eine ObservableCollection mit MySQL als Quelle (MySQL/MVVM)?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie aktualisiere ich eine ObservableCollection mit MySQL als Quelle (MySQL/MVVM)?

 
Beiträge zu diesem Thema Autor Datum
 Wie aktualisiere ich eine ObservableCollection mit MySQL als Quelle (MySQL/MVVM)? echdeneth 31.07.2020 08:45
 RE: Wie aktualisiere ich eine ObservableCollection mit MySQL als Quelle (MySQL/MVVM)? witte 31.07.2020 10:57
 RE: Wie aktualisiere ich eine ObservableCollection mit MySQL als Quelle (MySQL/MVVM)? Th69 31.07.2020 10:32
 RE: Wie aktualisiere ich eine ObservableCollection mit MySQL als Quelle (MySQL/MVVM)? echdeneth 31.07.2020 13:58
 RE: Wie aktualisiere ich eine ObservableCollection mit MySQL als Quelle (MySQL/MVVM)? Abt 01.08.2020 12:20

Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
echdeneth echdeneth ist männlich
myCSharp.de-Mitglied

avatar-178.gif


Dabei seit: 05.06.2019
Beiträge: 99
Entwicklungsumgebung: C# / Visual Studio 2019
Herkunft: Sachsen, Herrnhut/Zittau


echdeneth ist offline

Wie aktualisiere ich eine ObservableCollection mit MySQL als Quelle (MySQL/MVVM)?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin, ich habe 2 Tabellen, in einer stehen Lieferungen/Bestellungen und in der anderen
die dazugehörigen Einträge. (ListView/GridView)

Die 1. Tabelle hat ein SelectedItem="{Binding SelectedUnbeliefert}" mit dessen Hilfe für die
Fremdschlüsselbeziehung und SQL Abfrage notwendige ID ausgelesen wird.

SQL Abfrage - von dem Aufruf: public IEnumerable... gäbe es mehrere in der Klasse

C#-Code:
public class MySQL
    {
        private readonly string login = Globals.Login;
        private MySqlDataReader reader;

        public IEnumerable<ArtikelViewModel> GetArtikel()
        {
            List<ArtikelViewModel> artikels = new List<ArtikelViewModel>();

            using (MySqlConnection conn = new MySqlConnection(login))
            {
                conn.Open();

                //StringBuilder sb = new StringBuilder();
                //sb.AppendLine("SELECT *");
                string query = "CALL `NormalArtikelliste`();";
                using (MySqlCommand cmd = new MySqlCommand(query, conn))
                {
                    using (reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            artikels.Add(new ArtikelViewModel()
                            {
                                ArtikellisteIndex = reader.GetInt32(0),
                                ArtikelNummer = reader.GetString(1),
                                ArtikelName = reader.GetString(2),
                                BestellMenge = reader.GetInt32(3),
                                Geliefert = reader.GetInt32(4),
                                PrioID = reader.GetInt32(5),
                                PrioMenge = reader.GetInt32(6),
                                Datum = reader.GetDateTime(7),
                            });
                        }
                    }
                }
                ...
                }
            }

            return artikels;
        }
...

Dann eine:

C#-Code:
        private ObservableCollection<LieferungenViewModel> unbeliefert;
        public ObservableCollection<LieferungenViewModel> Unbeliefert
        {
            get { return unbeliefert; }
            set
            {
                if (unbeliefert == value)
                    return;
                unbeliefert = value;
                NotifyPropertyChanged("Unbeliefert");
            }
        }

und

C#-Code:
        private MySQL _sql = new MySQL();
        public BestellungenVM()
        {

            IEnumerable<LieferungenViewModel> __unbeliefert = _sql.GetUnbeliefert();
            Unbeliefert = new ObservableCollection<LieferungenViewModel>(__unbeliefert); // 1. Tabelle statisch(Lieferuingen...)

            IEnumerable<LieferungenViewModel> __ausgeliefert = _sql.GetAusgeliefert();
            Ausgeliefert = new ObservableCollection<LieferungenViewModel>(__ausgeliefert); // Unwichtig

        }
        void getArticle_OnSelect(int index)
        {
            IEnumerable<ArtikelViewModel> _selectUnbeliefert = _sql.GetBestellung(index);
            Artikelliste = new ObservableCollection<ArtikelViewModel>(_selectUnbeliefert); // 2. Tabelle dynamisch (Artikel)
        }

Ich weiss leider nicht wie ich die Collection nur aktualisiere ohne sie jedes mal neu zu instanzieren was so auch passiert wie ich annehme
getArticle_OnSelect(int index) wird über eine Eigenschaft ausgelöst, was mir auch nicht sehr gefällt - siehe Oben, das Bi´nding

C#-Code:
        private LieferungenViewModel selectedUnbeliefert;
        public LieferungenViewModel SelectedUnbeliefert
        {
            get => selectedUnbeliefert;
            set
            {
                selectedUnbeliefert = value;
                getArticle_OnSelect(selectedUnbeliefert.NormalBestellungenIndex);
                NotifyPropertyChanged();
                NotifyPropertyChanged("LCheck");
            }
        }

Hawbe garantiert irgendwas Vergessen zu Erwähnen, also meine Bitte um Milde

Danke
31.07.2020 08:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
witte
myCSharp.de-Mitglied

Dabei seit: 03.09.2010
Beiträge: 894


witte ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

... man könnte auch alle abhängigen Modelle laden und dann mit einer CollectionView arbeiten.
31.07.2020 10:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.672
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Mir scheint, es fehlt die Logik-Schicht. Du wurdest ja schon mehrfach auf  [Artikel] Drei-Schichten-Architektur hingewiesen, nun kannst du es praktisch einsetzen.

Die Lieferungen, Bestellungen und die Artikelliste sollten also in der Logik-Schicht verwaltet werden.

Außerdem sollte die DB-Klasse (und auch die Logik-Schicht) nichts von ViewModels wissen, sondern du solltest Modelldaten dafür erzeugen und verwenden.
Die UI-Schicht erzeugt dann aus diesen Modelldaten die passenden ViewModel-Daten (generell ist es aber normal, daß die ObservableCollection<T> jedesmal wieder neu erzeugt wird, wenn sich die Daten ändern - evtl. kannst du aber ein Caching einbauen, wenn es performancemäßig relevant ist).
31.07.2020 10:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
echdeneth echdeneth ist männlich
myCSharp.de-Mitglied

avatar-178.gif


Dabei seit: 05.06.2019
Beiträge: 99
Entwicklungsumgebung: C# / Visual Studio 2019
Herkunft: Sachsen, Herrnhut/Zittau

Themenstarter Thema begonnen von echdeneth

echdeneth ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Th69:
Mir scheint, es fehlt die Logik-Schicht. Du wurdest ja schon mehrfach auf  [Artikel] Drei-Schichten-Architektur hingewiesen, nun kannst du es praktisch einsetzen...

Genau hier liegt der Hund begraben.

ich habe kein praktischen Ansatz um Code in die 3 Schichten zu trennen. Vielleicht wird dies im
3. Lj. noch dran genommen, viel Hoffnung hege ich hierbei nicht.

Oftmals ist es auch so dass, wenn ich angenommen habe ich hätte es gefressen - ich hatte hier
mal ein Codebeispiel präsentiert - is hieß: "Nein so wird es nicht gemacht"

Kumulativ lässt sich sagen: Ich weiss nicht wie!
31.07.2020 13:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.013
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Der Beruf des Software Entwicklers ist leider ganz ganz ganz arg von Eigeninitiative getrieben und die Kunst ist die Anwendung von Erfahrung.

Du wirst weder in der Schule noch im Studium wirklich was über Pattern oder deren Anwendung im Allgemeinen lernen.
Da musst Du durch Bücher, Videos, Blogs... und ausprobieren. "Den einen" praktischen Ansatz gibt es auch nicht.

Mit einem "Ich weiß nicht wie" wirst Du da nicht arg weiter kommen - und darauf hoffen, dass Dir das andere Personen reinpressen, würde ich nicht tun ;-)
01.08.2020 12:20 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 09.08.2020 20:14