Lazarus 2.0.10 (2020.07.11.)
Letöltés

file DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

// cell all clear checked
procedure TForm.DBGridCellClear;
begin
  // check all
  SQLQuery.Close;
  SQLQuery.Open;
  SQLQuery.First;
  while not SQLQuery.EOF do begin
        RecList.CurrentRowSelected := False;
        SQLQuery.Next;
  end; // while
end;
#2059

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

Végülis ezzel megy:
  Dataset.First;
  while not ( Dataset.EOF ) do begin
    DBGridCellClick( DBGrid.Columns[0] );
    Dataset.Next;
  end;
#2025

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

A linkelt mintában hogyan lehet becsekkolni (és vissza) az összes sort? (select all)
Én úgy próbáltam, hogy meghívtam egy while ciklusban (DataSet-en) a DBGridCellClick() eseményt, de nem egészen jó.
#2024

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

A leírásban is bent volt amit belinkeltem.
ButtonStyle -> cbsCheckBoxColumn

:)
#2014

  • JohnnyK
  • JohnnyK profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 78
  • Köszönetek: 16

JohnnyK válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

Nos, ezek szerint van boolean tartalmú oszlopod a lekérdezésedben ('q'). Ilyen esetben viszont elég a DBGrid megfelelő oszlopának ButtonStyle értékét cbsCheckBoxColumn értékre állítani, és checkbox-szerűen fog kinézni. A kiindulási link olyan kerülőmegoldást mutat be, amikor nincsen ilyen boolean oszlop, mégis szükség volna valamiért egy checkbox oszlopra a DBGridben.
#2013

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

Vagy:
  SQLQuery.First;
  while not SQLQuery.EOF do begin
        q:= SQLQuery.FieldByName('q').AsBoolean;
        if (  q ) then
           // checked the checkbox
           DBGridCellClick( DBGrid.Columns[0] );
        SQLQuery.Next;
  end; // while               
#2012

  • JohnnyK
  • JohnnyK profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 78
  • Köszönetek: 16

JohnnyK válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

Ha a kódomat használod, amiben BooleanArray tárolja a checkbox-ok állapotát, akkor pl. a második checkbox bepipálásához ennyit elég beírni egy valamilyen eseménynél:
BooleanArray[2] := True;
DBGrid.Refresh;
#2011

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

Hogyan tudok ebbe a DBGrid-be checkbox-okat bekapcsolni, tehát kódból checked-re állítani.
#2010

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

Csak egy tipp a könyvjelzőlista elemeinek felhasználására:
procedure KonyvjelzozottRekordokKezelese;
var I:Integer;
begin
	DBGrid1.DataSource.Dataset.DisableControls; { DBGrid1 ne ugráljon amíg alkotunk }
	for I:=0 to DBGrid1.SelectedRows.Count-1 do begin
	 	DBGrid1.DataSource.Dataset.GotoBookmark(TBookmark(DBGrid1.SelectedRows[I]));
  		{ itt azt teszel a rekorddal amit akarsz }
	end;
	DBGrid1.DataSource.Dataset.EnableControls; { DBGrid1 újra követheti az adatforrás változásait }
end;
#2009

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

Köszönöm! Én is hasonlóra jutottam, annyi különbséggel, hogy egy StringList-be tároltam el a checkbox-al megjelölt ID-ket.
#2008

  • JohnnyK
  • JohnnyK profilkép
  • Gyakori fórumozó
  • Gyakori fórumozó
  • Hozzászólások: 78
  • Köszönetek: 16

JohnnyK válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

Az említett honlapon TBookmarkList objektumot illesztenek a DBGrid-hez RecList néven. Én is úgy tapasztalom, hogy ez önmagában nem alkalmas arra, hogy meg lehessen tudni, hogy pontosan mely sorok lettek kijelölve a DBGrid-ben, legfeljebb annyit lehet megtudni belőle, hogy hány darab pipa lett kiosztva (RecList.Count) összesen.
A RecList és vele együtt a TBookmarkList használata helyett egy olyan ötletem volna, hogy lehetne készíteni egy boolean array-t, ami majd tartalmazza, hogy melyik checkbox milyen állapotú, és könnyű is lekérdezni az állapotát. A linkelt honlapon szereplő példát így írnám át:
var BooleanArray: array of boolean
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
var  i: integer;
begin
  SQLQuery.Last;
  SetLength(BooleanArray, SQLQuery.RecordCount); // hogy pontos legyen a RecordCount értéke
  SQLQuery.First;
  for i := 0 to Length(BooleanArray) - 1 do BooleanArray[i] := False;
end;
 
procedure TForm1.DBGridCellClick(Column: TColumn);
begin
  if Column.Index = 0 then BooleanArray[DBGrid.DataSource.DataSet.RecNo] := not BooleanArray[DBGrid.DataSource.DataSet.RecNo];
end;
 
procedure TForm1.DBGridUserCheckboxState(Sender: TObject; Column: TColumn; var AState: TCheckboxState);
begin
  if BooleanArray[TDBGrid(Sender).DataSource.DataSet.RecNo] = True then AState := cbChecked else AState := cbUnChecked;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  SetLength(BooleanArray, 0);
end;
#2007

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

Próbáltam, hogy a 0. mező (checkbox) értékét megnézem:
var x: boolean;// x: variant;
...
x := DBGrid.Columns[0].Field.Value;
...
de elszáll "sigsegv"-vel az alkalmazás. Mit csinálok rosszul?
Ha DBGrid.Columns[1].Field.Value v. DBGrid.Columns[2].Field.Value próbálom, akkor nem száll el a progi. A checkbox mezővel van valami gondja. De nem tudom mi. :(
#2006

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab válaszolt a témára: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

Próbáltam így, de mindig 'False'-ot kaptam:
  SQLQuery.First;
  while not SQLQuery.EOF do begin
    if ( DBGrid.SelectedRows.CurrentRowSelected )
       then
         ShowMessage( 'True' )
       else
         ShowMessage( 'False' );
    SQLQuery.Next;
  end; // for
A megjelölt sorok esetén is 'False' maradt.
#2005

  • makgab
  • makgab profilkép
  • Törzstag
  • Törzstag
  • Hozzászólások: 280
  • Karma: -1
  • Köszönetek: 1

makgab létrehozta a témát: DBGRid + Checkbox + TBookmarklist items + CurrentRowSelected

Üdv!
Ez alapján egy DBGridbe tettem checkbox-okat.
Működik is, csak azt nem tudom, hogyan szedjem ki a RecList-ből a kiválasztott rekordokat.
Hogyan tudom elérni azt a CurrentRowSelected property-t a DBGrid-ben?
Az első oszlop (0.) a checkbox, a második (1.) pedig egy id. Azt szeretném megtudni, hogy melyik id-t jelölték be.
#2004