none
DataGridView mit DataTable und MySql ? RRS feed

  • Frage

  • Hallo,

    ich habe ein DataGridView und ein DataTable. Dabei selektiere ich aus einer MySql.Tabelle Daten durch die Fkt cmd_TO_MySql() und übergebe dem DataGridView:

    DataTable = cmd_TO_MySql("Select * From Tabelle");

    DataGridView .DataSource = DataTable;

    bis hier kein Problem.

    Frage: Soweit ich irgend welche Zellendaten in DataGridView ändere die Daten werden autom. in DataTable übernommen. Wie kommt das zustande ?

    Durch einen OK-Button versuche ich dann diese geänderte Daten aus DataGridView mit DataTable vergleichen, ob sich was geändert hat in die MySql-Tabelle speichern.

    MFG

    Samstag, 5. Januar 2013 12:43

Antworten

  • Hi,
    Du lädst die Daten in das Objekt, welches mit der Variablen “DataTable” referenziert wird. Die Variable “DataTable” verweist damit auf den Puffer mit den Daten.
     
    Das DataGrid hält selbst keine Daten, sondern holt sich bei Bedarf die Daten für die Anzeige aus dem Datenpuffer. Lediglich während des Edit-Vorganges wird der Inhalt einer Datenzeile im Grid gepuffert und zum Zeitpunkt des EndCurrentEdit in den Datenpuffer zurückgeschrieben. Ein EndCurrentEdit wird beispielsweise implizit beim Datensatzwechsel ausgelöst.
     
    Änderungen im Datenpuffer können dort “registriert” werden und später ausgewertet werden. Wenn der Datenpuffer eine Objekt vom Typ DataTable ist, dann sind die Datenobjekte vom Typ DataRow. Und ein DataRow-Objekt hat eine RowState-Eigenschaft, die für die Auswertung des Zustandes einer Datenzeile genutzt werden kann, added für hinzugefügt, deleted für gelöscht. modified für geändert und unchanged für unverändert.
     
    --
    Peter Fleischer
    Samstag, 5. Januar 2013 18:02
  • Hi,
    alle Steuerelemente die die gleiche DataTable benutzen arbeiten synchron. Wenn Du in Deiner Anwendung beispielsweise mehrere Grids hast, die alle die gleiche DataTable für die DataSource-Eigenschaft nutzen, dann arbeiten diese synchron.So etwas kann man in der Anwendung erreichen, indem die DataTable statisch ist, bzw. der Verweis aus die Instanz.
     
    --
    Peter Fleischer
    Dienstag, 8. Januar 2013 13:25
  • Hi,
    ein DataTable-Objekt ist IMMER unsortiert. In der Rows-Auflistung der DatatTable stehen die Datensätze in der Reihenfolge wie sie geladen (gefüllt) wurden.
     
    Mit der Bindung wird implizit eine Sicht erzeugt, die die Datenzeilen sortiert und/oder auch gefiltert für die Anzeige bereitstellt.
     
    Wenn Du überall die gleiche Sortier- und Filterkriterien nutzen willst, musst Du die gleiche Sicht nutzen, z.B DefaultView.
     
    --
    Peter Fleischer
    Dienstag, 8. Januar 2013 14:20
  • Hi,

    DefaultView ist eine Eigenschaft der Klasse DataTable. Siehe dazu:

      http://msdn.microsoft.com/de-de/library/system.data.datatable.defaultview.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 10. Januar 2013 16:23
    Moderator

Alle Antworten

  • Hi,
    Du lädst die Daten in das Objekt, welches mit der Variablen “DataTable” referenziert wird. Die Variable “DataTable” verweist damit auf den Puffer mit den Daten.
     
    Das DataGrid hält selbst keine Daten, sondern holt sich bei Bedarf die Daten für die Anzeige aus dem Datenpuffer. Lediglich während des Edit-Vorganges wird der Inhalt einer Datenzeile im Grid gepuffert und zum Zeitpunkt des EndCurrentEdit in den Datenpuffer zurückgeschrieben. Ein EndCurrentEdit wird beispielsweise implizit beim Datensatzwechsel ausgelöst.
     
    Änderungen im Datenpuffer können dort “registriert” werden und später ausgewertet werden. Wenn der Datenpuffer eine Objekt vom Typ DataTable ist, dann sind die Datenobjekte vom Typ DataRow. Und ein DataRow-Objekt hat eine RowState-Eigenschaft, die für die Auswertung des Zustandes einer Datenzeile genutzt werden kann, added für hinzugefügt, deleted für gelöscht. modified für geändert und unchanged für unverändert.
     
    --
    Peter Fleischer
    Samstag, 5. Januar 2013 18:02
  • Hallo,

    OK

    aber wie kann ich z.B an eine DataGridView mehrere DataTables je nach Button-Klick (nicht gleichzeitig) zuweisen da kommt immer ein Fehler:

    Button1-Klick:

    1.DataGridView1.DataSource = dt1;

    Button2-Klick:

    2. DataGridView1.DataSource = dt2;

    MFG

    Montag, 7. Januar 2013 15:21
  • Hi,

    poste bitte die genaue und vollständige Fehlermeldung.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 7. Januar 2013 15:31
    Moderator
  • Hallo, der Fehler hat woanders gelegen. Trotzdem, wie kann ich DataGridView so datzu bringen, bei Änderung irgend einer Spalte einer Sql-Abfrage seine Daten zuaktualisieren aus DataTable oder woanders? MFG
    Montag, 7. Januar 2013 18:41
  • Trotzdem, wie kann ich DataGridView so datzu bringen, bei Änderung irgend einer Spalte einer Sql-Abfrage seine Daten zuaktualisieren aus DataTable oder woanders?

    Bitte was?

    Ich für meinen Teil habe die Frage nicht verstanden. Was wird wo und vor allem wie aktualisiert? Passiert alles innerhalb deiner Anwendung? ...?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 7. Januar 2013 21:21
    Moderator
  • Hallo,

    d.h ich habe eine Sql-Abfrage, die wie folgt aussieht und dessen Erg in DataTable und DataGridView steht:

    DataTable = cmd_TO_MySql("Select * From Tabelle");

    DataGridView.DataSource = DataTable;

    Frage: ich ändere/lösche/einfüge irgend einen Datensatz in der o.g Tabelle von irgend einer anderen Form und erwarte, daß diese Änderung autom. in DataTable und DataGridView aktualisiert sind ohne manuelle Aktualisierung.

    Wie mache ich dies ?

    MFG






    • Bearbeitet ati.sah Dienstag, 8. Januar 2013 11:05
    Dienstag, 8. Januar 2013 10:49
  • Hi,
    alle Steuerelemente die die gleiche DataTable benutzen arbeiten synchron. Wenn Du in Deiner Anwendung beispielsweise mehrere Grids hast, die alle die gleiche DataTable für die DataSource-Eigenschaft nutzen, dann arbeiten diese synchron.So etwas kann man in der Anwendung erreichen, indem die DataTable statisch ist, bzw. der Verweis aus die Instanz.
     
    --
    Peter Fleischer
    Dienstag, 8. Januar 2013 13:25
  • Hallo,

    vielen dank

    eine weitere Info, wie kann ich eine HeaderSpaltenSortierung aus einer DataGridView.Header.Klick an seine zugehörige DataTable weitergeben, so daß DataGridView und DataTable aus der Sortierung synchron sind oder läuft dies auch autom. nach einer HeaderSpaltenSortierung Oberfläche?

    bitte um Sourcecode.

    MFG

    Dienstag, 8. Januar 2013 14:14
  • Hi,
    ein DataTable-Objekt ist IMMER unsortiert. In der Rows-Auflistung der DatatTable stehen die Datensätze in der Reihenfolge wie sie geladen (gefüllt) wurden.
     
    Mit der Bindung wird implizit eine Sicht erzeugt, die die Datenzeilen sortiert und/oder auch gefiltert für die Anzeige bereitstellt.
     
    Wenn Du überall die gleiche Sortier- und Filterkriterien nutzen willst, musst Du die gleiche Sicht nutzen, z.B DefaultView.
     
    --
    Peter Fleischer
    Dienstag, 8. Januar 2013 14:20
  • Hallo,

    was heißt und wo "DefaultView" ?

    MFG

    Donnerstag, 10. Januar 2013 14:42
  • Hi,

    DefaultView ist eine Eigenschaft der Klasse DataTable. Siehe dazu:

      http://msdn.microsoft.com/de-de/library/system.data.datatable.defaultview.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 10. Januar 2013 16:23
    Moderator
  • Hallo,

    vielen dank.

    Weil Sie so gut informiert sind, eine Sache würde mich noch interessieren und zwar:

    Wie kann ich z.B in einer DataGridView 1.Zeile oder irgendwelche Spalten miteinander verbinden und trotzdem Rest der Zeilen mit irgend welchen DataGridView.DataSource = DataTable(Sql-Abfragen) autom. mit Daten füllen ?

    MFG



    • Bearbeitet ati.sah Freitag, 11. Januar 2013 10:46
    Freitag, 11. Januar 2013 07:13
  • Hi,

    ich habe die Frage nicht verstanden. Aber falls ich die Bruchstücke richtig interpretiert habe: Gar nicht, da das nicht geht.

    Lies dir bitte mal das, was im oben verlinkten MSDN Artikel zu DefaultView (und auch zu DataTable, ...) steht, genauer durch. Dann wirst Du wahrscheinlich feststellen, dass das etwas anderes ist als Du es derzeit meinst.

    Nur kurz: DefaultView ist nichts anderes als eine Sicht auf die Daten einer DataTable mit der Möglichkeit, die Daten, die in der DataTable liegen, über entsprechenden Methoden/Eigenschaften sortiert/gefiltert/... zurückzugeben.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 11. Januar 2013 09:11
    Moderator
  • Hallo,

    so wie gehabt

    DataGridView.ReadOnly=false;    DataGridView.AllowUserToAddRows=true;     DataGridView.DataSource = DataTable(Sql-Abfragen);

    Ich gebe jetzt in die lezte leere Zeile irgend einer Spalte der DataGridView Daten ein.

    ich weiß es nicht in welcher Ereignis dies passiert SelectionChanged() oder RowsAdded ?

    Nach einer Eintrag in irgend einer Zelle der letzten leeren Zeile, wird dies aber nicht sofort in die DataTable eingetragen (DataTabale.Rows.Count bleibt erst unverändert) um dann vom DataTable in die DataGridView zu aktualisieren.

    1. Wie kann ich eine Aktualisierung sofort erzwingen ?

    2. trage ich neue Daten erst in die DataTable oder DataGridView ?

    3. beim Einfügen neuer Daten im letzten leeren Zeile die Ereignisreihenfolge welche als erstes und welche als letztes ?

    MFG




    • Bearbeitet ati.sah Samstag, 12. Januar 2013 10:50
    Freitag, 11. Januar 2013 13:10
  • Hallo ati.sah,

    Ich freue mich, dass Du seit einigen Monaten im C#-Forum postest. Ich hoffe, Du konntest hier viele hilfreiche Antworten erhalten.

    Auch wir hier haben einige Regeln, an die ich gerne erinnern möchte:

    1. Für jede neue Frage bitte einen eigenen Thread eröffnen.
    2. Es ist alles ein Nehmen und ein Geben. Auch in diesem Forum. Wenn Du hilfreiche Antworten bekommst, markiere bitte das entsprechende Posting als hilfreich indem Du auf den grünen Pfeil nach oben klickst. Sollte die Antwort deine Frage vollkommen beantworten, klicke bitte auf den Link "Als Antwort markieren".

    Wenn Du über die NNTP-Bridge postest und die Bewertungen nicht selbst vornehmen kannst, kannst Du in deinem Antwort-Posting darauf hinweisen. Ein Moderator oder ein Beantworter kann dann die von dir genannten Postings ggf. als Antwort markieren. Danke.

    Gruß
    Marcel

    Samstag, 19. Januar 2013 11:30
    Moderator
  • Hallo ati.sah,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 22. Januar 2013 10:53
    Moderator
  • Hallo Herr Roma,

    ich bin neu in C# und bin von einer anderen Sprache auf C# umgestiegen, deshalb gibt es einigen Unklarheiten und Fragen.

    Sei bitte nicht böse und gib einfach fachliche Antworten, wo es einfach weiter hilft.

    An dieser Frage bin ich leider nicht ganz weitergekommen.

    MFG

    Ati

    Mittwoch, 23. Januar 2013 06:54
  • Hi,
    wenn Du mit der Frage “DataGridView mit DataTable und MySql” nicht weitergekommen bist, dann schildere doch mal genau, was nicht funktioniert. Gibt es einen Fehler beim Laden der Daten? Werden keine oder die falschen Daten angezeigt?
     
    --
    Peter Fleischer
    Mittwoch, 23. Januar 2013 07:17
  • ich bin neu in C# und bin von einer anderen Sprache auf C# umgestiegen, deshalb gibt es einigen Unklarheiten und Fragen.

    Hallo ati.sah,

    • Immer für eine Neue Frage einen Neuen Thread aufmachen

    Grundsätzlich ist zu jedem neuen Thema ein eigener Thread zu öffnen, denn dadurch wird die Übersicht gewahrt.

    Ein eigener Thread nutzt der Kommunikation, verhindert Spannungen und Streit und trägt der Übersichtlichkeit in einem Forum bei.

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 23. Januar 2013 07:50
    Moderator