jak pobrać nr wiersza WxGrid

0

skoro GetSelectedRows zwraca typ wxArrayInt to taki też próbuję wykorzystać:

wxArrayInt rows = WxGrid1->GetSelectedRows();
int x;
x = rows.Item(0);

wcześniej próbowałem pobrać nr z tablicy poprzez: rows[0] ale jak widzę są od tego metody...
metody które nie działają!
program się kompiluje ale podczas działania wywala się
example jakie są w dev-cpp (w tym bazgrze... tragedia jeśli chodzi o helpa) guzik przedstawiają...
proszę o radę, jak mam pobrać nr zaznaczonego wiersza

0
wxArrayInt rows = WxGrid1->GetSelectedRows();
if(!rows.IsEmpty())
{
   int x;
   x = rows.Item(0);
   //...
}
0

niestety nic z tego
zresztą powyższy kod nic nowego nie wprowadza, poza tym że się bronimy przed dostępem do "pustej" zmiennej a skoro wykonuje polecenie:

rows = WxGrid1->GetSelectedRows();

to coś w tym 'rows' powinno się znaleźć... wczesniej mam warunek:

IF(WxGrid1->IsSelection())

a więc jakiś wiersz jest zaznaczony i COŚ powinno zostać zwrócone przez GetSelectedRows() a nie jest :/

nienawidzę takich idiotyzmów w programowaniu... czyżby sam wxSzajs był jakiś niedorobiony(?)

może ktoś ma jakieś dalsze pomysły... przecież bez tego to jak bez ręki w programie ;)

0

wczesniej mam warunek:

IF(WxGrid1->IsSelection())

a więc jakiś wiersz jest zaznaczony [...]

No, tylko zapomniałeś o tym napisać ;)

czyżby sam wxSzajs był jakiś niedorobiony(?)

Piszę od jakiegoś czasu w "wxSzajsie" i nie narzekam. Czasami te błędy to w rzeczywistości asercje, które podają info o tym, co jest powodem ich wystąpienia.

0

no dobrze, ale tak krótko:
chcę po prostu po zaznaczeniu wiersza i wciśnięciu buttona usunąć z bazy dany wiersz (pobrać dane z poszczególnych komórek tego wiersza) i nie wierzę, że jeszcze nikt czegoś takiego nie potrzebował...

pewnie (jak to zwykle bywa) problem leży w jakiejś błahostce... tylko gdzie ona jest ;)

0

Co to za błąd, segfault czy asercja?

Aha, IsSelection zwraca true jeżeli cokolwiek jest zaznaczone, nie tylko wiersze.

0

jednak wszystko już jest dobrze, według:

if(WxGrid1->IsSelection())
{
    wxArrayInt rows = WxGrid1->GetSelectedRows();
    if(!rows.IsEmpty())
    {
        int x;
        x = rows.Item(0);
        //...
    }
    //...
}

(niestety) pisze w dev-cpp który jest lekko nie dopracowany... przy tworzeniu GUI i określaniu parametrów np WxGrid'a by zezwalał tylko na zaznaczanie wierszy (ustawiałem na: wxGridSelectRows), w kodzie dalej miałem:

WxGrid1->CreateGrid(1,5,wxGrid::wxGridSelectCells);

poza tym nie wiedziałem o jednej ważnej sprawie:
zaznaczając wiersz w wxGrid należy go zaznaczać poprzez kliknięcie lewej skrajnej komórki (z numerem wiersza) a nie tak jak to robiłem (i do czego wiele osób jest przyzwyczajona) klikanie na dowolnej komórce...

żeby to usprawnić chyba trzeba będzie jednak ustawić własności wxGrida na wxGridSelectCells i po prostu wyłapywać sam nr wiersza z zaznaczonej komórki... :/ (nie potrzebne zmuszanie do kombinacji... i hate this ;-P )

dzięki 0x666 za zaangażowanie

0

Cóż, wxDev-C++ jest daleki od ideału i pewnie się już do niego nie zbliży. Autor projektu skupił się na tworzeniu komercyjnej wtyczki do C++Buildera...
Za to sam wxWidgets jest nadal intensywnie rozwijany. Ze względu na darmową licencję projekt jest chyba jednak wart uwagi.

0

Zaznaczyć we właściwościach WxGrida opcję Grid Selection na wxGridSelectCell i nie ma problemu z zaznaczaniem wiersza na lewej skrajnej komórce można teraz klikać na każdej komórce i powinno wskazać konkretny wiersz w Gridzie.

Co do opcji GetSelectedCells to proponuję wybrać zdarzenie OnSelectCell i załadować coś w tym stylu:

    int x;
x = event.GetRow();
wxString Buffor;
Buffor.Printf(wxT("Row = %d"),x);
WxStaticText3->SetLabel(Buffor);

W WxStaticText zobaczymy numer wiersza. Co do kolumny to GetCol().
Może się to komuś przyda bo widzę, że jest z tym problem i z info w necie też słabo.

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