|
wxGrid - przeskok do ostatniej komórki
randal - 15-11-2007 14:04
Witam, Mam wxGrid'a wypełnionego danymi. Wyświetlonych jest 30 wierszy a grid ma ich 100 Za cholere nie wiem jak przeskczyć do ostatniego wiersza w gridzie zaraz po wypełnieniu go danymi. Dane są brane z bazy.
Kodu na razie nie wklejam bo może istnieje tajna nie udokumentowana metoda o nazwie np:
wxGrid_go_to_last_row_very_forbiden_to_know_method ()
Jeżeli jest taka to nie jestem w stanie jej znaleźć.
Dzięki za odpowiedź
giaur - 15-11-2007 21:46
Napisz dokladnie o co ci chodzi. Nie wiesz jak ustawic kursor w okreslonej komorce? Jest metoda SetGridCursor/MakeCellvisible (udokumentowana, nawiasem mowiac).
Bo chyba wiesz w ktorej komorce chcesz sie ustawic, skoro dane pobierasz z bazy (znasz ilosc wierszy zwroconych w wyniku zapytnia).
Ewentaulnie przelec wszystkie wiersze i sprawdz od kiedy zaczynaja sie puste. Ja tu problemu nie widze zadnego.
randal - 16-11-2007 00:29
dobra - oto kawałek kodu:
# tu toworze grida
plik : mygrid.py
# klasa odpowiadająca za dane: class HugeTable(gridlib.PyGridTableBase): def __init__(self,_db,_cursor,_msg): gridlib.PyGridTableBase.__init__(self) self.db=_db self.cursor=_cursor self.msg=_msg self.result=9 # poniższe zwraca wyniki zapytania i kod ew błędu (self.sql,self.result)=self.db.get_result(self.msg,self.cursor,1) self.sql_columns = self.cursor.description self._rows = self.GetNumberRows() self._cols = self.GetNumberCols() def GetNumberRows(self): return len(self.sql)
#Tu klasa grida :
class HugeTableGrid(gridlib.Grid): def __init__(self, parent, _db,_cursor,_msg): gridlib.Grid.__init__(self, parent, -1) self.db=_db self.cursor=_cursor self.msg=_msg self.table = HugeTable(self.db,self.cursor,self.msg) def set_grid(self): self.SetTable(self.table, True) self.AutoSize()
plik mainform.py:
# tworzenie grida OK działa /1/ self.Grid_danych = HugeTableGrid(self.panel_grid,self.baza.dbase,self.baza.curr,self.baza.zapytanie)
# przeunięcie cursora na ostatni wiersz - OK działa /2/self.Grid_danych.SetGridCursor(self.Grid_danych.table.GetNumberRows()-1,0)
# przesunięcie widoku grida na koniec ( ostatni wierz) nie działa :-( /3/self.Grid_danych.MakeCellVisible(self.Grid_danych.table.GetNumberRows()-1,0)
Linijka /2/ ustawia kursor na ostatni wiersz ( OK jak przesunę myszką scrollbara to faktycznie kursor jest w ostatnim wierszu ) , ale /3/ wcale nie przesuwa widoku na ostatni wiersz. No wlaśnie i o to mi chodzi żę po stworzeniu grida widok pokazywał ostatnie dane a nie pierwsze. Najprościej oczywiście zmienić order w zapytaniu ale nie o to chodzi.
// używaj tagów code! ruun
giaur - 16-11-2007 11:55
A to dziwne już jest, bo z dokumentacji wynika, że linia /3/ u ciebie jest nawet nadmiarowa - wywołanie metody SetGridCursor powinno od razu pokazać wybraną komórkę (wywoływane jest automatycznie MakeCellVisible, nie musisz już tego robić).
Której wersji wxWidgets używasz? Może w Pythonie to nie dziala? Jak na moje oko to kod jest ok. Chyba bedziesz musial popytac na forum developerów wxWidgets http://wxforum.shadonet.com
Tymczasem moge poradzic chyba tylko aktualizacje wxPython do najnowszej wersji.
[edit] Spróbuj jeszcze wxGrid::ForceRefresh po przeniesieniu kursora do wybranej komórki - moze wystarczy odswiezyc siatke aby zobaczyc zmiany
randal - 22-11-2007 11:52
wx 2.8.6.1 najnowsze, pythong 2.4 . wxGrid::ForceRefresh nie pomógł. Będę muszał poszperać na forum wx,ów Dzięki za pomoc.
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|