DataSet an div. Textboxen?

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    DataSet an div. Textboxen?

    Moin,

    und zwar habe ich eine Datenbank, die ein DataSet befüllt und die wiederum ein DataGridView.
    Klappt auch alles super.

    Jetzt hätte ich gerne, dass bei einem Doppelklick auf einen Eintrag im DGV eine neue Form öffnet und sogesehen eine "Editoberfläche" darstellt.
    ergo hab ich auf meiner neuen Form ein paar Textboxen, diese möchte ich jetzt gerne mit den Daten aus dem geklickten Eintrag des DGV befüllen und bearbeiten können.

    Wie bekomme ich jetzt meine SelectedCell/Row Informationen in mein neues Form, so, dass ichs danach auf der neuen Form per Save-Button bspw. speichern kann?
    Soll ich das DataSet irgendwie an die spezifischen TextBoxen binden?
    Danke!

    Grüße,
    Kevin
    @Viercnt Oder einfach so was:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentDoubleClick
    2. MessageBox.Show(String.Format("{0} {1}", e.RowIndex, e.ColumnIndex))
    3. ' hier Dialog aufrufen und beide Parameter übergeben
    4. End Sub

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ah, danke euch beiden.

    Habe eben erstmal den Schritt gewagt und bin auf ein Typisiertes Dataset umgestiegen - das wird hier sicher einige freuen :D
    Jetzt wars auch möglich da direkt im Designer die Textbox an die Column aus dem Datagridview zu binden.
    Das Problem ist jetzt nur, er erkennt das Binding, klappt auch super, nur leider nimmt er immer den ersten Eintrag dieser Column, nicht den ausgewählten?

    und noch eine Frage: wenn ich die später richtig gebindet habe, wie speicher ich denn in der updateForm direkt die Änderungen in die DB?
    Danke!

    Grüße,
    Kevin
    im prinzip übergibst du doch bei der instanzierung des neuen (detail) forms dein dataset, entweder in der sub new oder als property.

    und in deinem detail form ziehst du dir aus dem datenquellen fenster deine datatable aufs form, nur eben nicht als dgv sondern im detail modus.
    die bindingsource deiner datatable zeigt aufs dataset.
    das wars. so mach ich das immer.

    edit: und als info: dataset ist ein verweistyp!


    da der beitrag im zusammenhang mit dem obigen etwas aus dem kontext gerissen ist sei der hinweis erlaubt, dass ihn irgendeiner der mods ausm anderen thread umgezogen hat da der te den beitrag doppelt erstellt hat...
    Gruß Hannes

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „hans im glück“ ()

    hans im glück schrieb:

    im prinzip übergibst du doch bei der instanzierung des neuen (detail) forms dein dataset, entweder in der sub new oder als property.


    Instanziert sich mein Detailview denn automatisch, wenn ich es per DetailForm.show() aufrufe? (wenn ich es schließe, mache ich das über me.dispose())

    hans im glück schrieb:


    und in deinem detail form ziehst du dir aus dem datenquellen fenster deine datatable aufs form, nur eben nicht als dgv sondern im detail modus.
    die bindingsource deiner datatable zeigt aufs dataset.
    das wars. so mach ich das immer.


    Mit Detailmodus meinst du jetzt was genau? Also nur die benötigte Table aus dem Designer auf den Form Designer ziehen?


    PS: und wenn ich dann den neuen Verweis habe, kann ich einfach mit der Standardspeicherprozedur auch in die DB schreiben?
    Danke!

    Grüße,
    Kevin
    @hans im glück: Hat mit dem Detailview schonmal super geklappt. auch das in die DB Speichern etc. :)

    Zwei Frage noch:

    1. Hab ich dadurch jetzt mehrere DataSets in meinem Projekt? Weil jetzt hab ich eines in meinem Homemenü, also das primäre DataSet, und scheinbar noch ein neu generiertes (weil ich das Detail View aus dem Datenquellenfenster gezogen habe) in meiner zweiten Form?

    2. Also, das klappt ja grad super, leider wird nicht mein im DGV doppelt angeklickter Eintrag in den Detail Textboxen angezeigt, sondern logischerweise immer der erste.
    Wie bewerkstellige ich es denn, dass schon der doppelt im DGV angeklickte Eintrag in das Detailview geladen wird und nicht stumpf der erste? (per RowIndex oder sowas?)
    Danke!

    Grüße,
    Kevin

    Viercnt schrieb:


    2. Also, das klappt ja grad super, leider wird nicht mein im DGV doppelt angeklickter Eintrag in den Detail Textboxen angezeigt, sondern logischerweise immer der erste.
    Wie bewerkstellige ich es denn, dass schon der doppelt im DGV angeklickte Eintrag in das Detailview geladen wird und nicht stumpf der erste? (per RowIndex oder sowas?)


    In dem Du für das DGV und für die Textboxen die selbe Bindingsource verwendest (ein einfacher Klick tut es auch).

    Dksksm schrieb:

    Viercnt schrieb:

    Aber die Bindingsources wurden mir doch vom Designer erstellt - wie verwende ich denn nun nur die erste?


    DGV Eigenschaften: Datasource
    Textbox Eigenschaften: (Databindings aufklappen) Text: selbe_Bindingssource_wie_DGV - Datenfeldname


    Ja, also beide haben die selben Namen - aber wie gesagt, es ist gut möglich, dass es zwei verschiedene sind, da ich auf beiden Forms im Designer der FOrms unten das DataSet, DataBindingSource etc. stehen habe.
    Bin mir nicht sicher ob ich nun 2 DataSets habe, oder nur eines :D

    Frage: Also der erste Eintrag wird ja immer angezeigt im Child form, aber selbst wenn die BindingSource die Gleiche wäre, würde die doch immernoch nicht wissen welchen Eintrag ich geklickt habe um nur den Eintrag im Child Form anzuzeigen?

    ErfinderDesRades schrieb:

    Viercnt schrieb:

    Hab ich dadurch jetzt mehrere DataSets in meinem Projekt? Weil jetzt hab ich eines in meinem Homemenü, also das primäre DataSet, und scheinbar noch ein neu generiertes (weil ich das Detail View aus dem Datenquellenfenster gezogen habe) in meiner zweiten Form?
    genau.
    siehe post#2


    Wären zwei besser, oder eines?
    Danke!

    Grüße,
    Kevin

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Viercnt“ ()

    Deine Gedankengänge kam ich teilweise nachvollziehen, als ich angefangen hatte waren es ähnliche Probleme.

    vielleicht hilft es dir den Blick mal vom spezifischen Problem zu lösen und dir klar zu machen, dass du einmal den datentyp des "dataset" hast.

    Und aus diesem datenyp werden Instanzen generiert.

    Ob das nun eine Instanz ist oder zwei oder drei kann ich nicht sagen.

    es kann auch sein, dass mehrere Zeiger/Variablen auf das gleiche Objekt zeigen. Das meinte ich als ich oben geschrieben habe das das dataset ein verweistyp ist
    Gruß Hannes
    Ja, ich muss ehrlich sagen, dass ich diese schwierigkeiten noch nicht hatte, als ich alles untypisiert hatte :D da wusste ich ja, welche DataSets ich habe, wie ich sie ansteuere etc. :D

    Jetzt bin ich einige wenige Probleme los, hab aber allgemein ca 20 neue :D

    @Edit: Nichtsdestotrotz weiß ich immernoch nicht, wie ich jetzt nur den angeklickten Eintrag im ChildDetailForm anzeigen lasse und nicht den allerersten
    Danke!

    Grüße,
    Kevin

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Viercnt“ ()

    steht alles in post#2
    einfach mal ernst nehmen, was da steht oder verlinkt ist.

    (und ich glaube nicht, dass du dein jetziges Prob mit untypDatasets leichter lösen könntest - weil hat ja eiglich nix damit zu tun.
    Ausser du ludest nach jedem Abspeichern die Daten nochmal neu (ganz unsinnigerweise, weil sie sind ja längst da))

    Viercnt schrieb:


    Ja, also beide haben die selben Namen - aber wie gesagt, es ist gut möglich, dass es zwei verschiedene sind, da ich auf beiden Forms im Designer der FOrms unten das DataSet, DataBindingSource etc. stehen habe.
    Bin mir nicht sicher ob ich nun 2 DataSets habe, oder nur eines :D


    Wenn DGV und die Textboxen mit den Details nicht auf der selben Form residieren, dann sind die Bindingssourcen auch bei identischen Namen nicht identisch. Die Antwort steht, wie Dir schon x-Mal gesagt wurde bereits im Posting #2.

    Viercnt schrieb:


    Frage: Also der erste Eintrag wird ja immer angezeigt im Child form, aber selbst wenn die BindingSource die Gleiche wäre, würde die doch immernoch nicht wissen welchen Eintrag ich geklickt habe um nur den Eintrag im Child Form anzuzeigen?


    Doch würde sie, weil Bindingsource.Current ja identisch wäre, solltest du Post #2 berücksichtigen.

    Viercnt schrieb:

    @Edit: Nichtsdestotrotz weiß ich immernoch nicht, wie ich jetzt nur den angeklickten Eintrag im ChildDetailForm anzeigen lasse und nicht den allerersten


    @ErfinderDesRades hat hierzu ein paar Vidieo TUtorials gemacht, 4 VIews heissen die glaub ich.
    SUch mal danach, da ist doch alles wunderbar erklärt und sollte egtl. gut verständlich sein.
    Gruß Hannes

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hans im glück“ ()

    Viercnt schrieb:

    wie ich jetzt nur den angeklickten Eintrag im ChildDetailForm anzeigen lasse und nicht den allerersten

    Nochmals in Post#2 zurückschauen und den darin liegenden Link öffnen - dort im Listing dann Zeile#10-#12 genau anschauen...(damit synchronisierst du deine Bindingsource auf die Tabelle des ursprünglichen Datasets)
    Okay okay, Also mithilfe der Helpers und des .EditCurrent vom Erfinder funktioniert jetzt super.
    Ich bin halt noch ein Anfänger, von daher ist "lies dir den Text für Fortgeschrittene durch" nicht unbedingt zielführend - nun weiß ich zwar nicht warum es funktioniert, da dein (EdR) Code halt super sophisticated ist, aber nichts desto trotz funktionierts bei mir jetzt - vielen Dank dafür :)
    Danke!

    Grüße,
    Kevin