Datagridview in UserControl designen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von DianonForce.

    Datagridview in UserControl designen

    Moin, sorry wenn die Frage dämlich ist, aber irgendwie will mein Hirn heute nicht recht arbeiten.

    Ich habe ein Usercontrol das ein Datagridview beinhaltet, das Datagridview möchte ich zur Designzeit gestalten, also Spaltenbreite, SpaltenText, SpaltenTyp, ... dazu brauch ich ja zur Designzeit eine Datenquelle die an das Datagridview gebunden ist, da es mir sonst keine Spalten anzeigt. D.H. ich hab im VS im Designer unten immer schön ein Dataset und eine Bindingsource hängen.

    Wie verpasse ich dem Datagridview nun zur Laufzeit die Daten welche ich gerne angezeigt hätte?

    Ich hab ein wenig gegoogelt und dabei den Ansatz gefunden, per public property des Usercontrols die Datasource des Datagridview zu setzen, wobei ich mich dan frage, wozu der Dataset und die Bindingsource im UC? Nur damit ich im Designer die Spalten designen kann? Weiß nicht ob ich da zu kleinlich bin, aber nur für den Deigner Objekte zu erzeugen die die App sonst nicht braucht?

    Mein Ansatz bisher ist, mit der DBExtension im Formular den Dataset zu registrieren und die Tabellen zu füllen. Im Usercontrol registrier ich ebenfalls den Dataset mit der DBExtension. Ergebnis, ich hab im UC die selben Daten wie im Formular und kann im Formular schön speichern und neu laden und es wirkt sich auf das Datagridview im UC aus. Ob der Ansatz nu wirklich vernünftig ist weiß ich allerdings auch nicht.

    Vielleicht kann mich mal wer auf den richtigen Weg bringen.

    Wer jetzt fragt, was das mit dem Usercontrol soll, könnte ja das Datagridview direkt ins Form knallen. Ich brauche zur laufzeit dynamisch bis zu 18 gleiche Ansichten, die zwar auf den Daten der selben Tabelle beruhen, aber andere Filter besitzen zusätzlich kommen bezogen auf den Filter noch Statistikwerte und Steuerelemente hinzu.

    DianonForce schrieb:

    Wie verpasse ich dem Datagridview nun zur Laufzeit die Daten welche ich gerne angezeigt hätte?

    Designzeit oder Laufzeit? Und welche Daten meinst Du genau? Aussehensdaten wie Spalten- und Zeilenkopfdesign?
    Brauchst Du denn überhaupt eine Datenquelle für das DGV des UCE? Falls nicht, bietet doch der SmartTag des DGV den Zugang zur Gestaltung des DGVs:

    Sobald Du auch nur eine Spalte hinzugefügt hast (und die Option »[x] Hinzufügen aktivieren« nicht ausgemacht hast) siehst Du doch in vollem Umfang, was dabei rauskommt. Irgendwie glaub ich aber, dass ich das Problem nicht verstanden habe :huh:
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wenn ich die Spalten so anlege, wie du vorschlägst, dann haben diese ja keine Zuweisung zu irgend einer Spalte in meinem Dataset, ergo zeigen sie auch keine Daten an. die DataPropertyName-Eigenschaft kann ich aber nicht einstellen da ja keine Datasource existiert (also alles im Designer).

    Wenn ich nun im Progrmmcode ein Dataset an das Datagridview binde, ist das zwar toll fürs Datagridview aber die von mir erstellten Spalten befüllt es trotzdem nicht.
    Ich verstehe das Problem wie folgt:
    Das DGV ist zum Designen mit Daten aus einem DataSet gefüllt. Damit man Spaltenbreite etc. festlegen kann.
    Dieses Dataset ist zur laufzeit aber nicht nötig. Nun möchtest Du wissen wie du das DGV an die Datenquelle bindest die zur laufzeit benötigt wird.

    Ist das so korrekt?
    Ah jetze, ja! Tja, Dein Weg ist schon richtig. Letztenendes funktioniert es nur so und die DBEx von EDR ersetzen ja alle vorhandenen DataSetklone durch das Highlander-DataSet. Und ja, jedes DataSet-gebundene DGV braucht erstmal im Designer sein eigenes DataSet, um gestaltet zu werden.
    Ich dacht, Du brauchst ein DGV ohne Bindung und nimmst ein DataSet, um das DGV gestalten zu wollen. Aber dem ist ja nicht so.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Akanel schrieb:

    Ich verstehe das Problem wie folgt:
    Das DGV ist zum Designen mit Daten aus einem DataSet gefüllt. Damit man Spaltenbreite etc. festlegen kann.
    Dieses Dataset ist zur laufzeit aber nicht nötig. Nun möchtest Du wissen wie du das DGV an die Datenquelle bindest die zur laufzeit benötigt wird.

    Ist das so korrekt?


    Jop, genau.

    VaporiZed schrieb:

    Ah jetze, ja! Tja, Dein Weg ist schon richtig. Letztenendes funktioniert es nur so und die DBEx von EDR ersetzen ja alle vorhandenen DataSetklone durch das Highlander-DataSet. Und ja, jedes DataSet-gebundene DGV braucht erstmal im Designer sein eigenes DataSet, um gestaltet zu werden.
    Ich dacht, Du brauchst ein DGV ohne Bindung und nimmst ein DataSet, um das DGV gestalten zu wollen. Aber dem ist ja nicht so.


    OK, ich hab nur gedacht ich mach da was zu kompliziert, weil mir

    VB.NET-Quellcode

    1. Dim adpDispatching = New DatasetAdapter(
    2. MySql.Data.MySqlClient.MySqlClientFactory.Instance,
    3. My.Settings.db_dispatchingConnectionString,
    4. ConflictOption.OverwriteChanges)
    5. Db_serviceticket.Adapter(adpDispatching).Register(Me,True)


    einen fehler im Usercontrol wirft, weil es eigendlich ein Form erwartet. Ich hab .Register einfach überladen mit einer Methode die ein Usercontrol erwartet und gut wars mir. Dann kam ich aber ins grübeln, die DBEx schien mir so durchdacht, das ich mir nicht vorstellen konnte das ich sowas machen muß und da fing ich an zu zweifeln ob es der richtige Weg ist.

    DianonForce schrieb:

    Mein Ansatz bisher ist, mit der DBExtension im Formular den Dataset zu registrieren und die Tabellen zu füllen.
    So habichs vorgesehen. Allerdings liegt diese Funktionalität nicht inne DbExtensions, sondern inne WinForm-Helpers. (macht inne Anwendung kein Unterschied, nur falls du ohne Db arbeitest, könnteste die DbExtensions weglassen, und dennoch dein Dataset registrieren.)

    DianonForce schrieb:

    Im Usercontrol registrier ich ebenfalls den Dataset mit der DBExtension.
    Braucht man nicht.
    Das UserControl liegt auffm Form, wenn das Form sich registriert, findet der Algo auch das Dataset auffm Ucl.

    (Wundert mich grade, dass das funktioniert - weil mir war, als hätte ich was eingebaut, was Exceptions wirft, um Doppel-Registrierungen zu verhindern. Aber vlt. habichs in zwischen auch schon wieder abgebaut.)

    ErfinderDesRades schrieb:



    DianonForce schrieb:

    Im Usercontrol registrier ich ebenfalls den Dataset mit der DBExtension.
    Braucht man nicht.
    Das UserControl liegt auffm Form, wenn das Form sich registriert, findet der Algo auch das Dataset auffm Ucl.

    (Wundert mich grade, dass das funktioniert - weil mir war, als hätte ich was eingebaut, was Exceptions wirft, um Doppel-Registrierungen zu verhindern. Aber vlt. habichs in zwischen auch schon wieder abgebaut.)


    Auch nicht wenn das Ucl erst nach dem Form.Load erstellt wird? Hatte nämlich dann immer das Ergebnis, dass das Dgv im Ucl leer blieb.
    ist Dummheit nen triftiger Grund?

    Edit: Danke für die Frage nach dem Warum, manchmal hilft einem das, darüber nachzudenken was man da eigendlich macht ^^ (OK, was ich um halb Eins noch privat an einem geschäftlichen Projekt mache, lässt sich nicht erklären. Oder vielleicht doch :D) Jedenfalls fiel es mir wie Schuppen aus den Haaren, das das doch alles Quatsch war. Ich lass die Ucl's jetzt vorher erzeugen, ist viel sinniger (zumindest aus gegenwärtiger Sicht), spart mir das doppelte Register und verhindert auch das unschöne Rendering beim öffnen (hätt ich mal vorher drauf kommen können).
    Wenn jetzt meine VPN Verbindung noch vernünftige Performance bringen würde, könnt ich es auch vernünftig Testen :(

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

    Naja, mein Freitags Ich war definitiv ned auf der Höhe. Mal davon ab, das ich beim erstellen des Forms die Ucl schon vor dem Register erstellen kann, aber ich wollte ansich auch, das man nachträglich noch Ucl's hinzufügen kann. Hier wirft es mir nun tatsächlich die von EDR erwartete Exception. Gibts ne vorgesehene Methode nachträglich nochmals nen Register durchzuführen?