Announcement

Collapse
No announcement yet.

die BindingSource einer View erneut füllen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • die BindingSource einer View erneut füllen

    Ich habe ein VB.NET Formular. Auf dem sind ein DGV und ein paar andere Steuerelemente.

    Nun soll in der DGV hierachische Daten abgebildet werden, daher hab ich eine View erstellt, der die Daten zusammen fügt. Die Bindingsource der view hab ich als Datenquelle der DGV angegeben.

    Werden die Tabellen geändert, finde ich keinen Weg, wie ich erneut die BindingSource die View ausführen lassen kann, damit ich die DGV "refereshen" kann.

    Hab es schon mit CurrencyManager.Refresh uä. versucht. Aber leider keinen Erfolg

    Hat jemand eine Lösung für das Problem?

    Danke

  • #2
    BindingSource ist ein Bindeglied zwischen einer Datenstruktur und visuellen Controls. Wenn du also die Daten in der Datenstruktur aktualisierst aktualisiert sich auch dein View(automatisch). Es gibt keinen Grund die BindingSource anzupassen.

    Comment


    • #3
      Originally posted by Ralf Jansen View Post
      Wenn du also die Daten in der Datenstruktur aktualisierst aktualisiert sich auch dein View(automatisch).
      das Aktualisieren passiert aber nicht - leider. Daher auch die Frage. Die bindingSources auf die einzelnen Tabellen bekommen die Änderungen mit. Nur nicht die, nur für das DGV erstellte, BindingSource (als Datenquelle eine View)

      Comment


      • #4
        Du kannst ein DataGridView.ResetBindings() probieren. Aber du hast irgendein Problem mit deinem Databinding das du eigentlich lösen solltest. Obiger Aufruf bekämpft(wenn es hilft) nur das Symptom löst aber das Problem nicht.

        Comment


        • #5
          Originally posted by Ralf Jansen View Post
          Du kannst ein DataGridView.ResetBindings() probieren. Aber du hast irgendein Problem mit deinem Databinding das du eigentlich lösen solltest. Obiger Aufruf bekämpft(wenn es hilft) nur das Symptom löst aber das Problem nicht.
          Hat leider nicht geholfen :-(

          Das ich ein Problem mir dem Binding habe, scheint mir auch so. Aber wie wird den so was "normaler weise gelöst"?

          Hier meine Tabellen:

          Code:
          Kontakt
          ID       Name
          1        Karl August
          2        Peter
          
          ZusatzKunde
          ID      KontaktID   Letzte Bestellung  Hat bezahlt
          1       1                   13.6.2010               1
          
          
          Im DGV soll angezeigt werden:
          Name     Letzte Bestellung   hat Bezahlt
          Kar August     13.6.2010            1

          Comment


          • #6
            Aber wie wird den so was "normaler weise gelöst"?
            Datenklasse <-> BindingSource <-> Control

            Jede Änderung in der Datenklasse wir sofort im Control widergespiegelt (und umgekehrt). Mehr gibt es zu ~normalerweise~ eigentlich nicht zu sagen.

            Comment


            • #7
              Dazu muss aber noch eine BindingList dazwischen. Ich glaub das reine hinzufügen von Items in die BindingSource reicht nicht. Ausserdem muss die Datenklasse auch INotifyPropertyChanged implementieren.

              Datenklasse:INotifyPropertyChanged <-> BindingList<Datenklasse> <-> BindingSource <-> Control

              Comment


              • #8
                Originally posted by Ralf Jansen View Post
                Datenklasse <-> BindingSource <-> Control

                Jede Änderung in der Datenklasse wir sofort im Control widergespiegelt (und umgekehrt). Mehr gibt es zu ~normalerweise~ eigentlich nicht zu sagen.
                Nur das das DGV eine andere datenklasse (BindingSource) ist, als die, die, die eigentlichen daten beinhaltet

                Der BindingNavigator, der das Springen in der Liste durchführt, wird korrekt gesetzt. Aber wie gesagt, das DGV hat als datengrundlage Informationen aus verschiedenen Tabellen und damit das geht, habe ich eine View gebaut. Diese wird auch beim Einlesen richtig ausgelesen. Nur nicht bei Änderungen der Tabellen (der Grundlage für die View)

                Comment


                • #9
                  Hast du eine Relation zwischen Kontakt und Zusatzkunde in deinem Dataset?

                  Dann würde ich einfach der Datatable eine ~berechnete~ DataColumn hinzufügen mit Expression "Parent.Name". Das DatagridView kannst du dann einfach an die Datatable die Zusatzkunde repräsentiert binden und dort dann die berechnete DataColumn anzeigen. Das notwendige was du über Expressions wissen musst findest du in der Hilfe zu DataColumn.Expression.

                  Comment


                  • #10
                    Ich muss das hier mal wieder aufgreifen da ich auch grad probleme damit habe und nicht weiter komme
                    bei mir siehts so aus
                    Daten kommen über einen SQLadapter und ne DataTable in die Bindingsource

                    Private daKunde As SqlDataAdapter
                    Private dtKunde As DataTable
                    Private bs As New BindingSource()


                    rskunde.OpenDB(gbl.sConnStr)
                    dtKunde = rskunde.GetKundenALL(daKunde)
                    rskunde.CloseDB()
                    Dim cb As New SqlCommandBuilder(daKunde)
                    bs.DataSource = dtKunde

                    Jetzt werden ein paar Felder der KundenTabelle an Textfelder gebunden.
                    Ziel ist es
                    das man später in den Textfeldern ändert und nach dem speichern nicht nur die angezeigten Felder aktualisiert werden sondern auch noch ein paar andere (letzteÄnderung etc..)
                    aber da bin ich noch nicht....

                    momentan hänge ich daran das ich ein nicht angezeigtes Feld (KundeAusgeblendet=true) über den Löschen Button mit einem ExecuteNonQuery aus meiner selbgebauten Classe direkt gegen die Datenbank fahre.

                    Meine Bindingsource bekommt davon nur nix mit und ein ganz normales
                    daKunde.update(dtKunde)
                    wirft ne Fehlermeldung...
                    hat wer nen Tipp?

                    Comment


                    • #11
                      Du solltest jede Änderung die sich auch in der Anwendung widerspiegeln sollen auf der Datatable ausführen. Jedes direkte Ändern an der Datenbank an der Datatable vorbei wird dich in Probleme stürzen und zu ~teurem~ synchronisieren zwischen Datatable und Datenbank zwingen.

                      Wenn wir dir bei deinem Update Problem helfen sollen solltest du uns den konkreten Fehler benennen.

                      Und für die Zukunft bitte bei einer neuen Frage einen neuen Thread erstellen und nicht irgendeinen alten ähnlichen Thread hijacken.

                      Comment

                      Working...
                      X