wxGrid - przeskok do ostatniej komórki

Potrzebujesz pomocy z C, C++, perl, python, itp.
randal
Posty: 11
Rejestracja: 15 września 2007, 10:59

wxGrid - przeskok do ostatniej komórki

Post autor: randal »

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
Member
Posty: 1915
Rejestracja: 25 maja 2007, 22:16

Post autor: giaur »

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
Posty: 11
Rejestracja: 15 września 2007, 10:59

Post autor: randal »

dobra - oto kawałek kodu:

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)
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
Member
Posty: 1915
Rejestracja: 25 maja 2007, 22:16

Post autor: giaur »

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.
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
Posty: 11
Rejestracja: 15 września 2007, 10:59

Post autor: randal »

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.
ODPOWIEDZ