[ itf @ 15.10.2007. 15:46 ] @
Postoji li funkcija koja mi odjednom može napraviti bookmark svih zapisa u DBGridu? Nikako da pronađem...
[ 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]