Announcement

Collapse
No announcement yet.

ListBox aktualisieren?

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

  • ListBox aktualisieren?

    Hallo zusammen,

    ich habe eine ListBox, die mit Daten aus einer *.txt Datei gefüllt wird. Eine extra Klasse ließt mit StreamReader die Datei ein und schreibt den Inhalt in eine ArrayList. Die ListBox ist mit listBox.DataSource an diese Klasse, bzw. deren Eigenschaften gebunden. Mittels TextBox und nem Button können neue Eintrage in die Textdatei geschrieben werden. Beides funktioniert auch super, aber die hinzugefügten Einträge erscheinen erst nach einem Neustart des Programms. Wie bekomme ich das hin, dass die ListBox den veränderten Inhalt auch darstellt?

  • #2
    Der standard ist eigentlich dass ein Benutzer einen Refresh Button hat, danach werden die Daten einfach erneut eingelesen (Listbox einträge löschen -> File laden -> ins Control schreiben). Wenn Du recht viele Benutzer auf einer Datei hast, dann würde ich das so lassen. Automatisieren kann man das dann noch über einen FileSystemWatcher. Dieser gibt Dir eine Nachricht sobald sich eine Datei/Ordner geändert haben. Damit würde ich aber bei großen Dateien/vielen Benutzer aufpassen.

    Comment


    • #3
      Ich vermute mal die ListBox und die Textbox in der selben Anwendung stecken? Da frag ich mich warum die beiden Teile "neuen Eintrag schreiben" und "Einträge anzeigen" nicht direkt miteinander komunizieren sondern nur zufällig über die Datei?
      Zuletzt editiert von Ralf Jansen; 11.03.2013, 11:11.

      Comment


      • #4
        Ja die stecken in der selben Anwendung und in der selben Form... Du meinst ich soll den text der TextBox in die listbox direkt schreiben und gleichzeitig nochmal in die Textdatei?

        Comment


        • #5
          Wäre es nicht sinnvoll, das persitieren und die Nutzung zu trennen. Also beim Start wird die Box aus der Textdatei befüllt, am Ende wird die Box (Inhalt) gespeichert. Alle Änderungen in der Textdatei nachzuführen ist nicht sinnvoll
          Christian

          Comment


          • #6
            Ok, das bedeutet ein neuer eintrag wird nicht in die Textdatei geschreiben, sondern in die ListBox. Der Inhalt der Listbox wird dann in die Textdatei geschrieben? Dann müsste die aber vorher erst gelöscht werden um Doubletten zu vermeiden oder?
            @Christian: Tolles Profilbild, will auch wieder hin....

            Comment


            • #7
              Ok, das bedeutet ein neuer eintrag wird nicht in die Textdatei geschreiben, sondern in die ListBox.
              Nein sondern in eine Klasse die die Daten hält. Diese Klasse kann dann die Daten so aufbereiten das sie in der Listbox angezeigt werden können und das lesen/schreiben in eine Textdatei bewerkstelligt.

              Comment


              • #8
                Und wie geht das? Also um das mal zu Erläutern wie das momentan aussieht. Ich hab die Form und ne Klasse DataLayer. DataLayer ließt die Textdatei ein und schreibt den Inhalt in eine ArrayList. Die Form erzeugt ein neues Objekt DataLayer und die ListBox.DataSource wird an deren getAccessor gebunden. Dieser wiederum spricht eine Methode an, die dann die Textdatei einließt. Das speichern übernimmt ein Button, der schickt den Text aus der TextBox an den setAccessor, dieser spricht die Methode mit StreamWriter an. So jetzt steht das neue Element in der Datei, aber nicht der ListBox. Auch wenn ich das Element gleich der ArraList hinzufüge, erscheint es nicht in der Listbox...

                Comment


                • #9
                  Ersetze die ArrayList durch eine Listenklasse die das IBindingList Interface implementiert z.B. BindingList<T>. Dann bekommt die Listbox mit wenn sich deren Inhalt ändert und weiß das es die gebunden Daten dann neu einlesen muss.

                  Das speichern übernimmt ein Button, der schickt den Text aus der TextBox an den setAccessor, dieser spricht die Methode mit StreamWriter an.
                  Der Setter der ArrayList? Du weißt eine neue ArrayList zu? Ich vermute mal eher du fügst den neuen Eintrag direkt der ArrayList hinzu oder? Da ist der Setter nirgendwo beteiligt.

                  Comment


                  • #10
                    Code:
                    publicstring setItems
                            {set { addItem(value); } }
                    

                    Comment


                    • #11
                      Aua.......

                      Comment


                      • #12
                        nicht gut? mit der BindingList funktioniert es auf jedenfall schon mal so...

                        Comment


                        • #13
                          Das es funktioniert das glaube ich dir. Stilistisch ist das aber daneben.

                          Es ist eine simple Methode. Dafür eine Property zu verwenden ist schräg. Plural benutzen aber nur einen Wert zu weisen. Eine reine Setter Property mit der keiner rechnet und sich beim Zugriff auf den Getter wundert. Und es gibt dafür auch keinen sinnvollen Getter. Dann gibt es auch keinen Grund davon einen reinen Property Setter zu machen. Es wird bestimmt im Moment auch niemand daran gehindert den Wert direkt der BindingListe hinzuzufügen.

                          Comment


                          • #14
                            Ok, ich hab die Methoden zum lesen und schreiben jetzt einfach öffentlich gemacht, hoffe das ist in Ordnung so...

                            Comment


                            • #15
                              Dann komme doch im Mai dort mal vorbei
                              Christian

                              Comment

                              Working...
                              X