Schmido hat folgendes geschrieben : |
| das Hinzufügen soll über das "*" links erfolgen. |
Aha. Dann wird durch die Bindung an BindingSource und DataTable automatisch die neue Zeile in der DataTable angelegt. Das bestätigst du auch durch:
Schmido hat folgendes geschrieben : |
| Solange das Programm offen ist, ist auch die Änderung da...nur wenn es wieder zugemacht wird, ist es das alte. |
Schmido hat folgendes geschrieben : |
| Ändern per Doppelklick. |
Das verstehe ich nicht. Wo klickst du doppelt? In der Regel wird eine Zelle im DGV automatisch durch einen einfachen Klick in den Edit-Modus gesetzt; dann kann sofort geändert werden.
Schmido hat folgendes geschrieben : |
Das Funktioniert ja auch in der Ansicht.
Nur wird es nicht in die Tabelle geschrieben. |
Du musst "irgendwo" - z.B. durch einen Button.Click - den Befehl TableAdapter.Update aufrufen, aber eine einfache Version, die sich auf alle Änderungen bezieht, und nicht eine solch komplizierte, die einige einzelne Zellen benutzen soll. Das sieht etwa so aus:
C#-Quelltext
1: 2: 3: 4: 5:
| private void saveButton_Click(object sender, EventArgs e) { myBindingSource.EndEdit(); kategorieTableAdapter.Update(kategorieTable); } |
Du beendest ausdrücklich die aktuelle Eingabe; das ist bei BindingSource bzw. DataGridView notwendig. Dadurch wird die Bearbeitung der aktuellen Zeile abgeschlossen; die aktuellen Werte werden in die
DataTable übertragen. Durch den
Update-Befehl werden alle Änderungen aus der DataTable (hier kategorieTable genannt) in die Datenbank übertragen.
Es müssen
Voraussetzungen erfüllt sein: Der SelectCommand, der zu diesem TableAdapter gehört, darf sich nur auf eine einzige Tabelle beziehen und muss den PrimaryKey enthalten. Nur dann sind InsertCommand, UpdateCommand, DeleteCommand vorhanden. Wenn die Voraussetzungen nicht passen, musst du die Änderungsbefehle vorher manuell erstellen.
Schmido hat folgendes geschrieben : |
| Für das Edit zum Beispiel habe ich folgendes Event verwendet: ... dataGridView_EingabeKategorie_CellEndEdit... |
Das hat mit dem Edit insgesamt wenig zu tun, wie sich aus den Erläuterungen in der
SDK-Doku/MSDN/Hilfe zum CellEndEdit-Ereignis ergibt.
Schmido hat folgendes geschrieben : |
| Aber wird nicht in die DB geschrieben. |
Wie gesagt: automatisch tut sich gar nichts. Du musst den Update-Befehl an einer sinnvollen Stelle in sinnvollem Zusammenhang bewusst aufrufen.
Schmido hat folgendes geschrieben : |
| Gibt es nicht ein Standard-Event für das Hinzufügen? |
Auch hier gilt: Was automatisch möglich ist, hast du durch die Auswahl der neuen Zeile durch '*' schon gesteuert. Alles andere müsste (wenn es gewünscht wird) durch den Aufruf einer passenden Methode an einer sinnvollen Stelle in sinnvollem Zusammenhang bewusst geschehen.
Bist du sicher, dass du den Begriff
Event immer richtig verwendest? Mir kommt es vor, als wenn du es mit
Methode verwechselst. Ein Ereignis (= Event) ist etwas, was "irgendwo" im Programm ausgelöst wird und dann behandelt werden soll; dazu gibt es die EventHandler (= Ereignisbehandlungsmethode). Eine Methode ist dagegen ein Block von Befehlen/Anweisungen, der zusammenhängend ausgeführt wird und vom Programmierer in bestimmten Situationen gezielt aufgerufen wird. (In anderen Programmiersprachen spricht man von Funktionen und Prozeduren o.ä.)
Zur Einarbeitung in die
Arbeit mit Datenbanken unter .NET solltest du dir etwas wie das
Openbook VC# Kap. 25 ff. durcharbeiten.
Gruß Jürgen