DBGrid通过代码突出显示定位的行?

时间:2013-10-25 23:08:23

标签: delphi row highlighting tdbgrid

我得到了:   ADOTable1(codepeople为整数,namepeople为字符串)   DataSource1(DateSet是ADOTable1)   DBGrid1(连接到DataSource1,选项-dgRowSelect为true)

我使用以下代码在ADOTable1上找到一行

  ADOTable1.Locate(ADOTable11codepeople.FieldName, 1, []);

DBGrid1正在选择正确的行。但不是亮点。

如何让DBGrid自动突出显示我从ADOTable1找到的行?

我阅读了以下链接但未找到答案:

How to set active cell in TDBGrid?

Delphi - Using DBGrid to select rows from a search

View position in DBGrid when scrolling in Delphi

简单的源代码请...

PS:我使用的是Delphi 2010。

4 个答案:

答案 0 :(得分:2)

以下代码将导致网格中的选定行突出显示

type
 THackDBGrid = class (TDBGrid);

...

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
           const Rect: TRect; DataCol: Integer; Column: TColumn;
           State: TGridDrawState);
begin
 if (THackDBGrid(dbGrid1).DataLink.ActiveRecord + 1 = THackDBGrid(dbGrid1).Row)
  or (gdFocused in State) or (gdSelected in State) then
   dbGrid1.canvas.Brush.Color:= clMoneyGreen;


 dbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;

答案 1 :(得分:1)

好的,在我尝试自己之后,我发现下面的代码可以执行代码:

DBGrid1.setfocus;

由于已经正确选择了行,因此setfocus会帮助突出显示。

无论如何,感谢回复:)

答案 2 :(得分:0)

grid.SelectedRows.CurrentRowSelected:= True; 这有助于我突出显示当前行

答案 3 :(得分:0)

于 13 年 10 月 27 日 5:44 回答

恕我直言,No'am Newman 的答案(上面有两个)是最好的,正确的答案。

现在是 2021 年。我使用的是 Delphi 10.2(东京); VCL 程序。我从 3.02 版(1986 年)开始使用 Delphi。

一些进一步的解释:

(1) dgAlwaysShowSelection 不适用于 dgRowSelect(并且此回复中提到的链接过于复杂 - 如果它们有效)

(2) DBGrid1.SetFocus 将焦点从可能是 ActiveControl 的地方移开

(3) grid.SelectedRows.CurrentRowSelected := True;对我不起作用

(4) No'am's hack --> 不到 10 行代码,并增加了选择颜色的能力。

(4.1) 如果您不想“选择”一种颜色,我建议您使用 clGradientActiveCaption(而不是 No'am 的 clMoneyGreen)。

(*) 我 98% (99%?) 确信我上面的所有观点将/将适用于至少回溯到 5 的任何版本的 Delphi。

<这就是我得到的>