ďťż
 
 
   wxGrid - przeskok do ostatniej komórki
 
 

Tematy

 
    
 

 

 

 

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis