Wypełnianie ListView

0

Mój program prezentuje dane w komponencie TListView. Dane są pobierane z bazy. Chcę usprawnić wczytywanie pozycji, tak by program się nie blokował podczas tej operacji.

Chyba trzeba zastosować wątek, prawda?

Czytałem też (ale już nie pamięta tego dokładnie) że można wykorzystać OwnerDraw do listowania tylko tych elementów które się zmieszczą na ekranie.

Chciałem Was zapytać, jaka jest najlepsza praktyka w takiej sytuacji?

0

nie wiem o jakie konkretnie blokowanie chodzi ale może wystarczy Application.ProcessMessages; w pętli wczytującej dane?

0

OK, to rozwiązało część moich problemów. Dzięki.

Teraz w następnym kroku chciałbym dorobić pasek postępu wczytywania. Do tegu już chyba trzeba wykorzystać wątki, tak? Czy może masz jaką inną propozycje Clarc?

0

Co do wydajności: BeginUpdate + EndUpdate?

Co do statusu: wątki, sprawdzanie co jakiś czas Items.Count, rozwiązań jest kilka.

0

panowie wątki żeby pokazać postęp wyświetlania danych?

Jeżeli pobierasz dane z bazy (zakładam że SQL) to pewnie pobierasz je za pomocą DataSet. Jak wykonasz jakieś zapytanie to chyba w pętli pobierasz dane z wyniku zapytania i wyświetlasz je w listview. Skoro wykonujesz to w pętli to masz też liczbę rekordów więc nie widze problemu żeby ustawić progressbar.max na liczbe rekordów i w pętli zwiętszać pozycję progressbara dodaj do tego Application.ProcessMessages i po problemie.

Jeśli chodzi o szybkość działania to jeżeli pobierasz bardzo dużo rekordów to wstawienie ich do ListView będzie chwilę trwało. Jeżeli rekordów nie jest dużo to nie ma sensu sie bawić ale jeśli pobierasz ich dużo to pomyślał bym o dbgrid albo stringgrid. Trzymaj dane w dataset a tylko rysuj na komponencie to co chcesz. Ale to tak jak mówię zależy jak dużo danych przetważasz.

I jeszcze jedno jak sie uprzesz przy rysowaniu po listview to proponuje zaopatrzyć się w komponent bodajze ListViewEX który posiada zdarzenie OnColumnResize, będziesz mógł odświezac rysowanie po zmianie rozmiaru kolumny.

pozdrawiam
puchi

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0