Elegante Lösung für Schleife 50 Labels vb.net

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Kaypetri.

    Ich habe ja ein DGV als Basis. An dieses sind ja via Filter z.B.: die Labels gebunden. Ändere ich jetzt an dem DGV etwas, wird doch die Binding Source neu durchlaufen und quasi das Child Label aktualisiert.
    Ich hoffe das war halbwegs verständlich.
    Bei einer bestimmten Änderung im DGV soll aber auch ein Change-Event ausgelöst werden. Das wird allerdings vor der Neuberechnung der Filter usw. gemacht. ich brauche das aber danach.
    Wenn Du die Farbe einer DGV-Zelle ändern willst, solltest Du den CellPainting-EventHandler nutzen. Dann hast Du im übergebenden Parameter e auch gleich den passenden Teil parat, den Du ändern kannst/musst: e.CellStyle.BackColor
    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.

    Kaypetri schrieb:

    Ich habe ja ein DGV als Basis. An dieses sind ja via Filter z.B.: die Labels gebunden. Ändere ich jetzt an dem DGV etwas, wird doch die Binding Source neu durchlaufen und quasi das Child Label aktualisiert.
    Ich hoffe das war halbwegs verständlich.
    Bei einer bestimmten Änderung im DGV soll aber auch ein Change-Event ausgelöst werden. Das wird allerdings vor der Neuberechnung der Filter usw. gemacht. ich brauche das aber danach.
    Hmm - KrautnRübn.
    Richtigstellung:
    Du hast Daten als Basis. Bei Databinding-getriebener Entwicklung sind immer die Daten die Basis. Controls sind immer nur angebundene "Anhängsel", die die Daten auf die eine oder andere Weise sichtbar machen.
    Etwa via BindingSource ist bei dir ein DGV an deine Daten angebunden.
    Des weiteren sind Labels an die BindingSource angebunden.
    Die Labels sind keine "Child-Labels" (was soll das sein, ein Child-Label?)
    Die Labels zeigen je eine Property des aktuell im DGV angewählten Datensatzes.
    Diese View-Art ist ein Detail-View, kein ChildView. Weil die Labels zeigen je ein Detail des aktuellen Datensatzes. Nur eines Datensatzes.
    (Ein ChildView würde viele Datensätze zeigen, nämlich alle ChildRows des og. aktuellen Datensatzes)

    Das Databinding des DGVs an die BindingSource bewirkt, dass du mit dem DGV die aktuelle Position der BindingSource verändern kannst, nämlich indem du einen anderen Datensatz anwählst.
    Wenn die aktuelle Position der BindingSource (bs.CurrentPosition) geändert wird, dann werden die Labels aktualisiert, damit sie weiterhin je eine Property des aktuell im DGV angewählten Datensatzes anzeigen.
    Wie gesagt: Durchlaufen wird da nix.

    So sollte es jdfs. aufgebaut sein.

    Zur Frage:

    Kaypetri schrieb:

    Ich möchte ein einem Control die Backgroundfarbe ändern und zwar NACHDEM die Bindings durchgelaufen sind.
    Ich nehme mal an, dass du mit "durchgelaufen sein" meinst, wenn die aktuelle Datensatz-Position sich geändert hat (etwa weil im DGV ein anderer Datensatz gewählt wurde).

    Verwende dafür das BindingSource_CurrentChanged-Event
    Hier ein fiktives Beispiel - ich hab ja nicht deine Solution:

    VB.NET-Quellcode

    1. Private Sub bsTable_CurrentChanged(sender As Object, e As EventArgs) Handles bsTable.CurrentChanged
    2. Dim rwTable = DirectCast(DirectCast(bsTable.Current, DataRowView).Row, TableRow) ' aktuelle TableRow aus der bs holen
    3. If rwTable.FarbeName = "red" Then lbFarbe.BackColor = Color.Red
    4. End Sub
    Das mit dem doppelten DirectCast() ist leider so, und muss man tatsächlich so umständlich und unintuitiv machen, um den tatsächlichen typisierten Datensatz zugreifen zu können.
    (Das hat seine Gründe, die hier zu diskutieren zu weit führen würden ;) )

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Hi. Ja, wie Du merkst habe ich so mein Schwierigkeiten der Begrifflichkeiten, aber wir reden durchaus vom gleichen. Ich schwebe einfach Softwaremäßig zwischen vielen Welten.
    Aber eines ist klar, an ein BindingSourceChange Event hatte ich noch gar nicht gedacht. Das wäre natürlich in diesem Fall die Sinnvolle Variante.
    man merkt, BS ist noch sehr sehr neu für mich.