5

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

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

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

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

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

我阅读了以下链接,但没有找到答案:

如何在 TDBGrid 中设置活动单元格?

Delphi - 使用 DBGrid 从搜索中选择行

在 Delphi 中滚动时查看 DBGrid 中的位置

请简单的源代码...

PS:我用的是德尔福 2010。

4

4 回答 4

5

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

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;
于 2013-10-27T05:44:04.183 回答
3

好的,我自己试过之后,发现下面的代码可以做到:

DBGrid1.setfocus;

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

无论如何,谢谢你的回复:)

于 2013-10-27T22:53:31.320 回答
1

2013 年 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%?)确信我以上所有观点将/将适用于任何版本的 Delphi,至少可以追溯到 5。

<这就是我得到的全部>

于 2021-04-05T06:16:15.393 回答
1

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

于 2020-05-09T20:08:12.290 回答