Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C#] Windows Forms: Odświeżanie listboxa

armant 20 Cze 2011 17:20 1809 2
  • #1 20 Cze 2011 17:20
    armant
    Poziom 8  

    Mam w okienku ListBox'a z podpiętą pod niego ArrayList jako DataSource (podręcznikowo według MSDN). Za pomocą kombinacji buttonów itd. edytuję zawartość ArrayList (wszystko w obrębie jednej formy). Sprawdziłem dokładnie - wszystkie możliwe zmiany w ArrayList faktycznie mają miejsce (usuwanie, edycja itd.).

    Problem polega na tym, że ListBox tych zmian nie zauważa. Mimo iż usunąłem z ArrayList'y dany obiekt, w ListBox'ie cały czas on widnieje. To samo dotyczy edycji - zmiana wyświetlanego w ListBox'ie parametru jest dokonywana w ArrayList i widoczna na oddzielnym TextBox'ie, ale ListBox uporczywie trzyma się poprzedniej wersji. Możliwa jest nawet taka absurdalna sytuacja, iż klikamy w ListBox'ie na dany obiekt i go edytujemy, mimo iż chwilę wcześniej ten obiekt usunęliśmy i w ArrayList, która jest źródłem danych dla naszego problematycznego ListBox'a fizycznie tego obiektu nie ma (sic!).

    Jak rozwiązać problem odświeżania danych ListBox'a? Próbowałem wrzucić w zdarzenia edytujące ArrayList metodę ListBox.Refresh(), ale to nic nie daje.

    0 2
  • Pomocny post
    #2 20 Cze 2011 19:44
    marcinj12
    Poziom 40  

    Musisz albo usunąć i ponownie podpiąć źródło danych:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    albo odświeżyć kontekst źródła danych:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    albo, i ta metoda mnie najbardziej przekonuje, podpiąć listę nie bezpośrednio, a przez obiekt BindingSource, który potem resetujesz:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    lub, zamiast resetowania, wstrzymywać i wznawiać bindingsource na czas modyfikacji listy:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #3 21 Cze 2011 16:55
    armant
    Poziom 8  

    Zarówno odświeżanie kontekstu jak i podpięcie danych za pomocą BindingSource działają bez zarzutu. Opcji z usuwaniem i ponownym podpinaniem danych nawet nie sprawdzałem - z wiadomych względów ;)

    Dzięki za pomoc.

    0