Benutzer mit den meisten Antworten
Master/Detail - Kopieren, Einfügen

Frage
-
Hallo,
- Master/Detail -
Wie lässt dich folgendes realisieren.
siehe Bild.a) Zunächst nur eine Tabelle
Kopieren, einfügen über Contextmenü
b) Tabelle Master/Detail
Primär-/Fremdschlüssel Problematik denke ich.Danke für Tipps via MDB oder SQL Datenbank.
-> VS2008, C#
Viele Grüße
Antworten
-
Hallo Thorsten und Andreas,
beim Einfügen mit ForeignKey muss normal zuerst in die Haupttabelle, auf dessen ID (PK) sich dann zum Beispiel die andere Tabelle bezieht, eingefügt werden (je nach referentieller Integrität).
Der Rest ergibt sich ggf. automatisch.
... und für Master-Detail DGVs vielleicht etwas wie:
[Master/Detail mit DataSet-Designer]
http://dzaebel.net/MasterDetail.htm
[Gewusst wie: Erstellen eines Master-/Detailformulars mit zwei DataGridView-Steuerelementen in Windows Forms]
http://msdn.microsoft.com/de-de/library/c12c1kx4.aspx
ciao Frank- Als Antwort markiert Andreas Bauer2 Sonntag, 22. August 2010 11:53
Alle Antworten
-
Hallo Andreas,
ja, der Primärschlüssel sollte ja eindeutig sein, daher ist beim Kopieren von Zeilen dort ein neuer zu erstellen (wenn er nicht automatisch erstellt wird).
Ich würde Zeilen ganz einfach "stur" kopieren, indem ich durch die einzelnen Zellen der selektierten Zeile(n) iteriere und aus den Werten dann eine/mehrere DataRows erzeugen, die ich in der Klasse halte und beim Einfügen dann der zugrundeliegenden DataTable (evtl. im DataSet) hinzufüge.
Ich habe mit den designer-gebildeten Objekten und DataGridViews allerdings keine große Erfahrung, meine Datenoperationen finden eher im Hintergrund statt und es werden mal ein paar Thumbnails von Bildern mit Infos angezeigt, aber nicht per DGV. Also sollten wir vielleicht besser auf jemanden warten, der hier mehr zu vermitteln hat.
Viele Grüße,
Thorsten
-
Ich habe mit den designer-gebildeten Objekten und DataGridViews allerdings keine große Erfahrung, meine Datenoperationen finden eher im Hintergrund statt und es werden mal ein paar Thumbnails von Bildern mit Infos angezeigt, aber nicht per DGV. Also sollten wir vielleicht besser auf jemanden warten, der hier mehr zu vermitteln hat.
Hallo Thorsten,
kein Problem, vielleicht meldet sich noch jemand. Danke trotzdem. Das Problem hast du ja verrstanden. Schönes Wochenende (wahrscheinlich ja das letzte 'richtige' Sommer WE) ;-) Andreas
-
Hallo Andreas,
ich hätte da eh' mal die Frage, warum Du denn Datensätze kopieren und in die *gleiche* Tabelle wieder einfügen möchtest?
Generell für DataGridViews gibt es bei Frank Dzaebel einige gute Beispiele so etwa:
http://dzaebel.net/DgvItemSwitch.htm
und generell http://dzaebel.net/Artikel.aspx
Viele Grüße,
Thorsten
-
Hallo Thorsten und Andreas,
beim Einfügen mit ForeignKey muss normal zuerst in die Haupttabelle, auf dessen ID (PK) sich dann zum Beispiel die andere Tabelle bezieht, eingefügt werden (je nach referentieller Integrität).
Der Rest ergibt sich ggf. automatisch.
... und für Master-Detail DGVs vielleicht etwas wie:
[Master/Detail mit DataSet-Designer]
http://dzaebel.net/MasterDetail.htm
[Gewusst wie: Erstellen eines Master-/Detailformulars mit zwei DataGridView-Steuerelementen in Windows Forms]
http://msdn.microsoft.com/de-de/library/c12c1kx4.aspx
ciao Frank- Als Antwort markiert Andreas Bauer2 Sonntag, 22. August 2010 11:53
-
... und für Master-Detail DGVs vielleicht etwas wie:
[Master/Detail mit DataSet-Designer]
http://dzaebel.net/MasterDetail.htm
Hallo Frank,
ja es ist gut. Das Contextmenü fehlt aber auch noch, oder?
Grüße Andreas
- Bearbeitet Andreas Bauer2 Sonntag, 22. August 2010 11:55 Rechtschreibung
-
Hallo Andreas,
> ContextMenu fejlt noch ...
Dazu kannst Du einfach ein ContextMenuStrip in die Form ziehen, deren gewünschte Inhalte einfügen und dann an die ContextMenuStrip-Eigenschaft des DataGridView binden.
Will man je nach Zelle ein anderes ContextMenu anzeigen, kann man die Einträge im Opening-Ereignis (zum Beispiel) noch ändern (die Zelle bekommt man mit HitTest heraus). Ansonsten ggf. noch mal nachfragen. Oder auch direkt die ContextMenuStrip-Eigenschaft einer speziellen DataGridViewColumn / DataGridViewRow setzen. Was beim Klick auf ein Kontextmenü gemacht werden soll, kann man durch Doppelklick auf das Element bestimmen, indem man einen Handler implementiert. Vielleicht auch folgendes interessant:
[Ein ContextMenuStrip für diverse DataGridViews]
ciao Frank -
Dazu kannst Du einfach ein ContextMenuStrip in die Form ziehen, deren gewünschte Inhalte einfügen und dann an die ContextMenuStrip-Eigenschaft des DataGridView binden.
Will man je nach Zelle ein anderes ContextMenu anzeigen, kann man die Einträge im Opening-Ereignis (zum Beispiel) noch ändern (die Zelle bekommt man mit HitTest heraus). Ansonsten ggf. noch mal nachfragen. Oder auch direkt die ContextMenuStrip-Eigenschaft einer speziellen DataGridViewColumn / DataGridViewRow setzen. Was beim Klick auf ein Kontextmenü gemacht werden soll, kann man durch Doppelklick auf das Element bestimmen, indem man einen Handler implementiert. Vielleicht auch folgendes interessant:
[Ein ContextMenuStrip für diverse DataGridViews]
Hallo Frank,
wer übernimmt die Logik beim Kopieren?
Sprich wer geniert den Primärschlüssel, Fremdschlüssel? Geht das automatisch oder muss ich erst den Fremdschlüssel merken? Deise Info fehlt mir doch noch.
a) Master - kein Problem
b) Detail - Primär der Detail + Fremd der Mastertabelle
Grüße Andreas