Announcement

Collapse
No announcement yet.

Databinding an eigene Klasse ???

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

  • Databinding an eigene Klasse ???

    Hallo!
    Ich habe eine Klasse mit Eigenschaften (also z.B. clsPerson mit den Eigenschaften Vorname und Nachname)

    Nun möchte ich beim Öffnen eines Formulars eine neue Instanz dieser Klasse erstellen und einzelne Steuerelemente an die Eigenschaften dieser Klasse binden. Bei der Bindung scheitere ich bereits.

    Außerdem:
    Wenn ich ein Steuerelement ändere (also z.B. Nachname), soll sich auch das Property der Instanz ändern. Hab schon was gefunden wie INotifyPropertyChanged. Aber so richtig weiter komme ich nicht. Die Literatur, die ich habe, verweist dafür an das www, aber dort finde ich kein durchgängiges Beispiel/Tutorial, das ein Nicht-Profi wie ich nachvollziehen kann.


    Hat jemand einen Link zu einem gut erklärten Beispiel oder sonstige Hilfen/Tipps?

    Vielen Dank

  • #2
    Hallo SQL-Rookie,

    Windows Forms Data Binding hat dir nicht geholfen?

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Vielen Dank für die schnelle Antwort und den Link.
      Hat mir schon insofern geholfen, als dass ich nun weiß, wie ich INotifyPropertyChanged in meiner clsPerson einsetze.
      Was ich aber nicht gefunden habe, ist, wie ich das Databinding im Formular hinbekomme.

      Also mein Formularcode (Form1_load):

      Code:
      Dim myperson as new clsPerson(“Mustermann”, “Max”)
      Textbox_Nachname.DataBindings.Add(???)
      Da komme ich nicht drauf.
      Zuletzt editiert von gfoidl; 08.05.2012, 12:11. Reason: Fullquote entfernt

      Comment


      • #4
        So, habs hinbekommen. Ist ja nun wirklich trivial:

        Code:
        tb_name.DataBindings.Add("Text", clsPersonBindingSource, "nachname")
        Das einzige, was noch nicht funktioniert:
        Ich ändere in einer Textbox den nachnamen. Klicke ich direkt in die Menüleiste (infragistics toolbar) zum Speichern, werden die änderungen NICHT gespeichert.
        Klicke ich hingegen vorher noch auf ein anderes Feld, und dann auf Speichern, wird die Änderung angenommen.

        Weiß jemand rat?

        Comment


        • #5
          Die Textbox aktualisiert seine DataSource standardmäßig bei Focusverlust wie eigentlich alle Controls. Und Tool- bzw. Menübars haben üblicherweise keinen eigenen Focus. Ich denke mal die Infraguistics Controls Verhalten sich da nicht anders als die Standardcontrols.

          Du hast mindestens 3 Möglichkeiten das zu umgehen.

          a.) Den DataSourceUpdateMode des Bindings auf OnPropertyChanged setzen. Dann wird die Datenquelle immer sofort aktualisiert. Heißt der wert landet im Prinip bei jeden Tastenclick sofort in der gebundenen Klasse.

          b.) Explizit im EventHandler des Toolbar Ittems BindingSource.EndEdit() aufrufen um die aktuelle Editierungen zu beenden und in die DataSource zu schreiben.

          c.) Im eventHandler einfach einen Focuswechsel (und damit ein Update) erzwingen in dem man den Focus auf ein anderes Control legt.

          Comment


          • #6
            Hui b. ist aber eine wirklich gruselige Lösung die ich unter allen Umständen vermeiden würde. Warum muss ein Menü eine BindingSource für was ganz anderes kennen.
            Kommt natürlich auch auf die Größe der Anwendung an

            Comment


            • #7
              Auf dem Niveau wäre dann jede Lösung schlecht

              Ich finds ok wenn aus den EventHandlern des Menüs die zu einer Form gehören auch auf die BindingSourcen die zu der Form gehören zugegriffen wird. Ist ein reines Form-interna.

              Comment

              Working...
              X