Laden...

GridView MainForm und EditForm

Erstellt von PreAlpha vor 11 Jahren Letzter Beitrag vor 10 Jahren 847 Views
P
PreAlpha Themenstarter:in
23 Beiträge seit 2012
vor 11 Jahren
GridView MainForm und EditForm

Hallo,

Es geht um folgendes: Ich habe eine MainForm mit einem GridView welche Daten aus einer dahinter stehenden Firebird Datenbank anzeigt (per DataSet). Nun möchte ich bei Doppelklick (bzw. Klick auf einen Button) auf eine Reihe ein neues Form zum ändern des Datensatzes öffnen (ich nenne es mal EditForm).

Nun stehe ich vor folgendem Problem: Ich muss der EditForm sagen um welchen Datensatz es sich handelt. Nun hätte ich gedacht, übergebe ich der EditForm einfach den PrimaryKey (also die ID) des gedoppelklickten Eintrages. Damit habe ich aber leider immer noch keinen Zugriff auf den kompletten Datensatz in der EditForm.

Das komplette DataSet aus dem MainForm der EditForm zu übergeben wäre wohl ein bisschen Overkill.

Gibt es da evtl. eine elegantere Lösung ? Sollte ja eigentlich nicht all zu schwer zu realisieren sein, ist es doch ein häufig anzutreffender Designansatz.

Im GridView auf der MainForm werden im übrigen nur einige Spalten der dahinter hängenden Tabelle in der Datenbank angezeigt (aus Gründen der Übersichtlichkeit). Im EditForm möchte ich allerdings auf alle Spalten des jeweiligen Records zugreifen.

LG

4.221 Beiträge seit 2005
vor 11 Jahren

Also ich würde das ganze DS übergeben (ist ja nur eine Referenz).

Und wenn Du im Main und EditForm mit Databinding arbeitest, dann müsstest Du nur noch imn EditForm denselben BindingContext setzten wie im MainForm... und schon würde im EditForm auf Current-Record des MainForm gebunden

DataSource=DS
DataMember=Name der Tabelle

Gruss
Programmierhans

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

P
PreAlpha Themenstarter:in
23 Beiträge seit 2012
vor 10 Jahren

Tut mir Leid das ich jetzt das Thema nochmal rauswühlen musste.

Ich habe mein DataSet der anderen Form im Konstruktor übergeben. Das funktioniert auch wunderbar um Daten auszulesen. Wenn ich nun aber Daten in das DataSetB aus Form2 schreiben möchte, schreibt er sie zwar in das DataSetB, macht aber keine Anstalten das ganze nach einem TableAdapter.Update() in die Datenbank zu schreiben.

Nun müsste ich mein (editiertes) DataSetB aus Form2 wieder in Form1 an DataSetA übergeben und über dieses die dahinterliegende Datenbank aktualisieren. Das wird aber ziemlich unübersichtlich und wirkt zudem ziemlich unelegant (von Fehleranfälligkeit und Datensynchronität ganz zu schweigen).

Da muss es doch noch eine andere Möglichkeit geben ? Ich brauche in meiner Anwendung prinzipiell nur ein einziges DataSet aus welchem ich (und der Designer) von mehreren Forms aus zugreifen kann (meine Grids sind per Designer an das DataSet gebunden).

LG

4.931 Beiträge seit 2008
vor 10 Jahren

Hallo PreAlpha,

du mußt auch denselben TableAdapter verwenden (also nicht in der 2. Form einen neuen erstellen)!

Noch besser wäre es, du würdest dein Programm so aufbauen, daß es eine eigene DataLayer-Schicht benutzt (so daß diese dann die DataSets und TableAdapter etc. verwaltet).

P
PreAlpha Themenstarter:in
23 Beiträge seit 2012
vor 10 Jahren

Wenn ich aber DataAdapter und DataSet an meine neue Form übergebe (oder eben an eine Klasse die meine Datenbankzugriffe verwaltet), wie kann ich das DataSet dann im Designer an mein Grid binden um noch vollen Designer Zugriff auf meine Grid Layout Optionen zu haben (wie z.B. Anordnung der Spalten) ?

Muss ich hierzu im Designer ein neues DataSetC erstellen, dem DataSetC den wert von DataSetB zuordnen (welches den Wert von DataSetA zugeordnet bekommen hat) um dann letztendlich DataSetB wieder den Wert von DataSetC zuzuordnen ? Das wäre dann meine bereits vermutete, wenig elegante, Methode. Das muss doch besser lösbar sein ?

LG