我得到了: 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。
答案 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。
<这就是我得到的>