Postoji li funkcija koja mi odjednom može napraviti bookmark svih zapisa u DBGridu? Nikako da pronađem...
BCB - DBGrid bookmark
Zaključano
Zakačeno
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.
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.
U tome i jest problem jer imam na tisuće zapisa i samo "šetanje" mi traje jako puno vremena...
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)
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)
Da, samo što sam ja radio alternativno skrivajući DBGrid. Uglavnom, šteta što nema direktno neke funkcije za ovu upotrebu...
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...
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.
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.
> 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.
> 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.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
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.
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 = "";
}
}
}
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 = "";
}
}
}
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.
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.
izmenjeno 1 put, poslednji put X Files 16.10.2007. u 09:57
Izmene poruke
- X Files16.10.2007. u 09:57zapis iz teksta poruke
Probaj ovako /DBGrid > Options > MultiSelect=true/:
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.)
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();
}
}
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.)
izmenjeno 1 put, poslednji put itf 16.10.2007. u 10:16
Izmene poruke
- itf16.10.2007. u 10:16zapis iz teksta poruke
To me i zanimalo da li se može drukčije jer ja već imam ovo:
Ništa onda. Mora biti sekvencijalno i to je to. Hvala svima.
EDIT:
sa ovim Eof možeš riješiti problem provjere broja slogova
Code:
.
.
GridPitanja->DataSource->DataSet->First();
while(!GridPitanja->DataSource->DataSet->Eof)
{
GridPitanja->SelectedRows->CurrentRowSelected = true;
GridPitanja->DataSource->DataSet->Next();
}
.
.
.
.
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