Autor |
Beitrag |
alaan
Hält's aus hier
Beiträge: 14
|
Verfasst: Fr 20.02.09 18:26
Hallo,
ich möchte gern eine Anwedung entwickeln, die Daten aus einer Datenbank in ein Dataset lädt. Über eine BindingSource und einen BindingNavigator zeige ich diese in einem Grid an. Ausserdem binde ich auch Textboxen an die BindingSource.
Solange ich Daten abfrage, funktioniert auch alles problemlos. Wenn ich nun aber beim Start des Programms sofort einen Datensatz hinzufügen will..?
Wie funktioniert das? Die ganze Datenanbindung setzt voraus, dass eine Abfrage zugrunde liegt. Ich will aber auch die Option bieten, sofort einen neuen Datensatz hinzuzufügen, ohne vorher Daten zu holen.
Lässt sich das in die ADO Architektur integrieren, also die Arbeit mit Dataset, BindingSource usw. Ich würde ungern einfach mit command.executeQuery in die Datenbank schreiben, weil das aus dem Kontext der Datenbindung rausfallen würde.
Hat jemand eine Lösung diesbezüglich?
Grüße
alaan
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Fr 20.02.09 20:12
alaan hat folgendes geschrieben : | Wie funktioniert das? Die ganze Datenanbindung setzt voraus, dass eine Abfrage zugrunde liegt. |
Nein, das stimmt nicht. Das ist zwar der häufigste Anwendungsfall, aber beileibe nicht der einzige.
alaan hat folgendes geschrieben : | Ich will aber auch die Option bieten, sofort einen neuen Datensatz hinzuzufügen, ohne vorher Daten zu holen. |
Dann mach das doch einfach.
alaan hat folgendes geschrieben : | Lässt sich das in die ADO Architektur integrieren, also die Arbeit mit Dataset, BindingSource usw. |
Natürlich, z.B. mit DataTable.NewRow() und DataTable.Rows.Add(). Wenn später DataAdapter.Update kommt, landen diese Daten automatisch in der DB.
alaan hat folgendes geschrieben : | Ich würde ungern einfach mit command.executeQuery in die Datenbank schreiben, weil das aus dem Kontext der Datenbindung rausfallen würde. |
Das ist aber völlig unproblematisch. Wenn zuerst einzelne Daten gespeichert werden sollen und erst später Daten geholt werden, passt ebenfalls alles zusammen.
/Edit
Du meinst vermutlich command. ExecuteNonQuery (denn es ist ja keine Abfrage).
Gruß Jürgen
Zuletzt bearbeitet von JüTho am Sa 21.02.09 11:43, insgesamt 1-mal bearbeitet
|
|
Christoph1972
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Sa 21.02.09 00:54
Hi,
für so etwas nutze ich auch gerne tableAdapter.Insert("dds","klkd"........
Gruß
Christoph
|
|
alaan 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 23.02.09 10:22
Hallo,
danke für die Antworten.
Gibt es keinen Weg, dass über die BindingSource zu machen, obwohl noch keine Daten da sind? Sonst programmiere ich ja extra für diesen Fall, also wenn ein Datensatz hinzugefügt werden soll, obwohl noch keine Daten geholt worden sind, an der ganzen Binding Geschichte vorbei?
BindingSource.Add...gibt es ja. Das klappt aber nicht so wirklich.
Grüße,
alaan
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Mo 23.02.09 10:32
Hallo,
ich verstehe nicht, warum Du auf der Änderung der BindingSource beharren willst. Die "kapselt die Datenquelle für ein Formular", wie es in der SDK-Doku/MSDN heißt. Was spricht dagegen, die DataTable selbst zu ändern? Durch die BindingSource stehen die Änderungen doch ebenfalls zur Verfügung.
Zitat: | Das klappt aber nicht so wirklich. |
Das ist sowieso keine wirkliche Problembeschreibung. Was klappt denn nicht? Aber wenn es schon nicht so richtig funktioniert, warum willst Du dann unbedingt diesen Weg gehen, wenn es einen anderen gibt?
Nun ja, jeder wie er mag. Jürgen
|
|
alaan 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 23.02.09 13:15
Hallo JüTho,
naja, beharren...is nicht der richtige ausdruck. Ich dachte nur, ich wollte ein konsistentes Vorgehen. Mein Problem ist, dass ich eine BindingNavigator Komponenete benutze. Wurde vorher Daten geholt, kann man damit ja auch wunderbar editieren, also z.B auch einen Datensatz hinzufügen. Wird die Anwendung jedoch gestartet, sind also noch keine Datensätze geholt worden, ist die BindingNavigator Komponente nicht aktiv. Will ich nun einen Datensatz hinzufügen, müßte ich ja einen ganz anderen Mechanismus anwenden, z.B eine zusätzliche Schaltfläche dafür oder so.
Sind dann Daten da, kann ich neue Datensätze über den BindingNavigator hinzufügen.
Natürlich kann ich über die DataTable direkt gehen. Ich will ja nur wissen, ob ich es unnötig kompliziert mache, weil ja die BindingSource die Struktur der Tabelle eigentlich kennt.
Grüße
alaan
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Mo 23.02.09 14:00
Wenn es mal so, mal anders auftritt, dann ist die Bearbeitung der DataTable unbedingt vorzuziehen. Ob Du die betreffende Methode aus dem BindingNavigator heraus oder per BindingSource.Add oder per Button.Click aufrufst, ist doch völlig schnuppe. Es gehört doch sowieso in eine eigene Methode AddNewCustomerRow (oder wie auch immer) und nicht an fünf Stellen bei fünf verschiedenen EventHandlern. Jürgen
|
|
|