Ik heb een dbgrid die gevuld wordt m.b.v. een query. (Via een datasource).
De velden die worden getoond zijn boolean velden en worden weergegeven door een checkbox.
Stel ik scroll in de dbgrid helemaal naar onderen en klik vervolgens op een checkbox in de derde regel van onderen. Het veld waarop wordt geklikt wordt netjes aan of uitgevinkt en daarna verspringt de dbgrid. De regel waarin is gemuteerd springt naar onderen zodat het onderste regel in de dbgrid wordt. (De regel waarop geklikt is blijft wel de actieve regel).
Dit automatisch verspringen komt waarschijnlijk doordat ik de mutatie doorvoer en de dbgrid meteen weer opnieuw vul.
Kan ik het verspringen voorkomen? Bijvoorbeeld een soort van bookmark instellen?
De code die wordt uitgevoerd als op de dbgrid wordt geklikt is:
Code:
procedure DbGridCellClick(Column: TColumn);
var
sBool, sVeldnaam : String;
Rownumber, i : Integer;
begin
if Main_Gvsx_Frm.ODBCConnection1.Connected then
begin
i := Column.Index;
sBool := Main_Gvsx_Frm.DBGrid1.Columns[i].Field.AsString; //Tekst uit de cell halen
sVeldnaam:= Main_Gvsx_Frm.DBGrid1.Columns[1].Field.AsString; //Tekst uit de cell halen
Rownumber := Main_Gvsx_Frm.SQLQuery1.RecNo; //"regelnummer"
if i = 2 then //field_is_copy --> afhankelijk van de volgorde van opvragen. (Dit moet flexibel worden)
begin
if sBool = 'False' then
begin
with Main_Gvsx_Frm.SQLQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('update sys_pssprts_flds_defs set field_is_copy = True where field_Name = '''+ sVeldnaam + '''');
ExecSQL;
Close;
//Procedure van maken, komt x maal voor
SQL.Clear;
SQL.Add('select a.passport_name, b.field_name, b.field_is_copy, b.field_is_locked, b.field_is_visible');
SQL.Add('from sys_pssprts_defs a, sys_pssprts_flds_defs b');
SQL.Add('where a.passport_id=b.passport_id');
SQL.Add('order by a.passport_name, b.field_name');
Active:=True;
end;
end
else
begin
with Main_Gvsx_Frm.SQLQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('update sys_pssprts_flds_defs set field_is_copy = False where field_Name = '''+ sVeldnaam + '''');
ExecSQL;
Close;
SQL.Clear;
SQL.Add('select a.passport_name, b.field_name, b.field_is_copy, b.field_is_locked, b.field_is_visible');
SQL.Add('from sys_pssprts_defs a, sys_pssprts_flds_defs b');
SQL.Add('where a.passport_id=b.passport_id');
SQL.Add('order by a.passport_name, b.field_name');
Active:=True;
end;
end;
Main_Gvsx_Frm.SQLQuery1.MoveBy(Rownumber-1); //Hiermee blijft de rij actief waarop geklikt is
end;
end;
Bookmarks