[ itf @ 15.10.2007. 15:46 ] @
Postoji li funkcija koja mi odjednom može napraviti bookmark svih zapisa u DBGridu? Nikako da pronađem... |
[ itf @ 15.10.2007. 15:46 ] @
[ X Files @ 15.10.2007. 17:16 ] @
Ja nisam upoznat da može odjednom.
Alternativa je da se kreira niz TBookmark-ova (od TDataSet::RecordCount elemenata), pa da se redom markira element po element (GetBookmark()), ali to već znaš i sam. E sad, ne znam koliko vremena bi ovo uzelo,jer se mora biti pozicioniran za vreme markiranja. [ itf @ 15.10.2007. 17:33 ] @
U tome i jest problem jer imam na tisuće zapisa i samo "šetanje" mi traje jako puno vremena...
[ X Files @ 15.10.2007. 17:53 ] @
Jesi li probao:
Na početku petlje: TDataSet::DisableControls() // ... petlja ...i na kraju petlje: TDataSet::EnableControls() (to bi trebalo da ubrza petlju, jer nema više pozicioniranja data awere kontrola, ali opet ne znam da li je to dovoljno ubrzanje za ono što tebi treba) [ itf @ 15.10.2007. 18:02 ] @
Da, samo što sam ja radio alternativno skrivajući DBGrid. Uglavnom, šteta što nema direktno neke funkcije za ovu upotrebu...
[ X Files @ 15.10.2007. 18:07 ] @
Ne znam zašto si mislio da koristiš baš toliku Bookmark tabelu, ali BCB ima jako dobru Lookup() funkciju koja može da pretražuje po sadržaju više polja odjednom. Pri tome interno koristi i indekse (zbog brzine) ako su postavljeni...
[ itf @ 15.10.2007. 18:17 ] @
Ovako...
Radim program za generiranje testova na faksu, a testovi su sa višestrukim odgovorima. Pitanja ima oko 60 000 iz razno raznih područja i admin mora selektirati od kojih pitanja želi sastaviti test. Ukoliko on primjerice odabere samo 10 pitanja a test se sastoji od 5 pitanja onda će program slučajnim odabirom iz tih OZNAČENIH 10 izabrati samo 5. Ono što ja želim omogućiti jest da odjednom može označiti sva pitanja i da među njima onda može slučajno izabrati N pitanja. [ savkic @ 15.10.2007. 18:57 ] @
> Radim program za generiranje testova na faksu, a testovi su sa višestrukim odgovorima. Pitanja ima oko 60 000 iz razno raznih područja i
> admin mora selektirati od kojih pitanja želi sastaviti test. Ukoliko on primjerice odabere samo 10 pitanja a test se sastoji od 5 pitanja onda > će program slučajnim odabirom iz tih OZNAČENIH 10 izabrati samo 5. Ono što ja želim omogućiti jest da odjednom može označiti sva pitanja i > da među njima onda može slučajno izabrati N pitanja. Ako ti treba lista selektovanih onda koristi SelectedRows properti. Ako hoćeš da napraviš listu svih slogova, imaš ih već u datasetu i dodatna lista je nepotrebna. [ X Files @ 15.10.2007. 19:04 ] @
Ne znam kako si zamislio GUI, tj. da li stavke biras visestrukom selekcijom, ili ih prebacujes u posebu listu/grid. Ako je u pitanju visestruka selekcija, onda kako i savkic rece, postoji SelectedRaws[] koji se lepo moze upotrebiti.
Evo ga primer za SelectedRaws /iz BCB Help-a/ a sad vidim (prvi put) da postoji i GotoBookmark() sa void* kastovanjem na selektovanu stavku. Moze se korisno upotrebiti. Code: The following example copies the selected rows in a db grid to a list box. void __fastcall TForm1::Button1Click(TObject *Sender) { if (DBGrid1->SelectedRows->Count > 0) { AnsiString s = ""; TDataSet *pDS = DBGrid1->DataSource->DataSet; for (int i=0; i < DBGrid1->SelectedRows->Count; i++) { pDS->GotoBookmark((void *)DBGrid1->SelectedRows->Items[i].c_str()); for (int j = 0; j < pDS->FieldCount; j++) { if (j>0) s = s+", "; s = s + pDS->Fields->Fields[j]->AsString; } ListBox1->Items->Add(s); s = ""; } } } [ itf @ 16.10.2007. 08:24 ] @
Krivo ste me shvatili.
Znam ja kako doći do označenih odgovora, ali meni treba da ih nekako odjednom sve označim, a da ne moram ići sekvencijalno u kodu označavati ih jedan po jedan (jer time gubim dosta vremena). Znači: Da li se odjednom nekom funkcijom mogu označiti svi zapisi u gridu jer želim napraviti nešto tipa SELECT ALL. [ X Files @ 16.10.2007. 08:47 ] @
Probaj ovako /DBGrid > Options > MultiSelect=true/:
Code: void __fastcall TForm1::Button1Click(TObject *Sender) { if ( DBGrid1->DataSource->DataSet->RecordCount < 1 ) return; try { DBGrid1->DataSource->DataSet->DisableControls(); DBGrid1->DataSource->DataSet->First(); do { DBGrid1->SelectedRows->CurrentRowSelected = true; } while( DBGrid1->DataSource->DataSet->FindNext() ); } __finally { DBGrid1->DataSource->DataSet->EnableControls(); } } EDIT: Ako nema slogova, vrati se iz funkcije (Samo treba proveriti ono <1. Secam se da sam nekad imao cudne vrednosti RecordCount kad je u pitanju prazan grid, u smislu, nekad je RecordCount jednak -1 a nekad 0. Ne secam se.) [Ovu poruku je menjao X Files dana 16.10.2007. u 09:57 GMT+1] [ itf @ 16.10.2007. 09:00 ] @
To me i zanimalo da li se može drukčije jer ja već imam ovo:
Code: . . GridPitanja->DataSource->DataSet->First(); while(!GridPitanja->DataSource->DataSet->Eof) { GridPitanja->SelectedRows->CurrentRowSelected = true; GridPitanja->DataSource->DataSet->Next(); } . . Ništa onda. Mora biti sekvencijalno i to je to. Hvala svima. EDIT: sa ovim Eof možeš riješiti problem provjere broja slogova [Ovu poruku je menjao itf dana 16.10.2007. u 10:16 GMT+1] Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|