Es wäre schön, wenn du künftig deine Gedanken etwas mehr sortieren könntest und nicht alle Gesichtspunkte so hintereinanderweg schreiben würdest, wie sie dir in den Kopf kommen. Dieses Durcheinander macht es mir ziemlich schwer, sinnvoll zu antworten.
KostaK hat folgendes geschrieben : |
Wie meinst du das nichts gemacht wird |
In Zeile 1 wird der Variablen dta eine neu erzeugte DataTable zugewiesen. Diese DataTable ist leer, hat keine Columns und keine Rows. Sie steht vielleicht im Arbeitsspeicher an der Stelle 4F 3C 77 00. Danach:
KostaK hat folgendes geschrieben : |
ich weise der DataTable die Grid zu: dta = (DataTable)dgv.DataSource; |
In Zeile 2 holst du aus der DataSource eine völlig andere DataTable, nämlich eine mit Columns und Rows, die im Arbeitsspeicher vielleicht an der Stelle 76 54 32 10 steht, und willst diese künftig mit dem Namen dta ansprechen.
Was glaubst du wohl, was mit der DataTable an Position 4F 3C 77 00 passiert und gemacht wird?
JüTho hat folgendes geschrieben: |
mit der wird aber nichts - gar nichts - gemacht. |
Weiter:
KostaK hat folgendes geschrieben : |
-> ich hab mir ein paar beispiele angeschaut und die machen es alle so (denke ich). |
Das kann ich mir gar nicht vorstellen. Vielleicht steht es in den Beispielen so:
C#-Quelltext
1: 2:
| DataTable dta; dta = (DataTable)dgv.DataSource; |
Erkennst du den entscheidenden Unterschied? Ist dir klar, was dieser Unterschied zu bedeuten hat?
KostaK hat folgendes geschrieben : |
und dann tut der adapter das Update mit der DB: objAdapter.Update(dta); mit den Daten der DataTable aus der Grid -> Hmm...
ist das falsch? |
Nein, es ist nicht unbedingt falsch. Aber wenn beim Einlesen eine feste DataTable verwendet wird (nämlich eine, die in der Anwendung direkt drin steht und einen dauerhaft gültigen Namen hat), hat man einen besseren Überblick über die vorhandenen Objekte.
KostaK hat folgendes geschrieben : |
ich mein es funktioniert ja so larifarimäßig.
bzw. wie ist es richtig ? |
Wie ich schon sagte: Irgendwo in der Anwendung dta (meistens auch mit DataSet) deklarieren, beim DbDataAdapter.Fill mit Inhalt versehen und überall dort, wo diese DataTable verwendet wird, auch diese Instanz und damit auch diese Variable benutzen.
KostaK hat folgendes geschrieben : |
noch was EndEdit() geht leider nicht. |
Den
entscheidenden Punkt versteckst du mittendrin. Das geht nicht? Das kann ich gar nicht glauben.
KostaK hat folgendes geschrieben : |
ohne DataTable geht es auch
C#-Quelltext 1: 2:
| dgv.EndEdit(); objAdapter.Update((DataTable)dgv.DataSource); | |
Natürlich. Du machst dabei nichts anderes; du verzichtest nur auf einen nutzlosen new-Befehl und eine insofern überflüssige Variable.
Noch etwas: Die Überschrift ist eigentlich falsch. Es geht darum, dass die DataTable etwas speichern soll, nicht das DataGridView. Du musst zwischen Anzeige-Objekt und Daten-Objekt unterscheiden. Allerdings kann ich deine Formulierung verstehen; denn die Tatsache, dass nicht gespeichert wird, fällt im Zusammenhang mit dem DGV auf.
Jürgen