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ź
wxGrid - przeskok do ostatniej komórki
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.
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.
dobra - oto kawałek kodu:
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
Kod: Zaznacz cały
# 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)
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
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ć).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.
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