DBGrid1 游标移动到指定 ID
在 DBGrid1 中,当用户输入或选择某个 ID 时,自动定位并显示该记录的所在行
🔧 实现方案
方法一:使用 TFDQuery.Locate 方法(推荐)
// 假设有一个 Edit1 用于输入 ID
var
TargetID: Integer;
begin
TargetID := StrToIntDef(Edit1.Text, 0);
if TargetID > 0 then
begin
// 使用 Locate 方法查找记录
if FDQuery1.Locate('id', TargetID, []) then
begin
// 可选:确保焦点在 DBGrid 上
DBGrid1.SetFocus;
ShowMessage('已定位到 ID: ' + IntToStr(TargetID));
end
else
ShowMessage('未找到 ID: ' + IntToStr(TargetID));
end
else
ShowMessage('请输入有效的 ID');
end;
方法二:使用书签(Bookmark)方法
var
TargetID: Integer;
Bookmark: TBookmark;
begin
TargetID := StrToIntDef(Edit1.Text, 0);
if TargetID > 0 then
begin
Bookmark := FDQuery1.GetBookmark;
try
FDQuery1.DisableControls;
FDQuery1.First;
while not FDQuery1.Eof do
begin
if FDQuery1.FieldByName('id').AsInteger = TargetID then
begin
DBGrid1.SetFocus;
Exit;
end;
FDQuery1.Next;
end;
ShowMessage('未找到 ID: ' + IntToStr(TargetID));
finally
FDQuery1.GotoBookmark(Bookmark);
FDQuery1.EnableControls;
FDQuery1.FreeBookmark(Bookmark);
end;
end;
end;
方法三:使用 SQL WHERE 子句重新查询
var
TargetID: Integer;
begin
TargetID := StrToIntDef(Edit1.Text, 0);
if TargetID > 0 then
begin
FDQuery1.SQL.Clear;
FDQuery1.SQL.Text := 'SELECT * FROM CK WHERE id = :id';
FDQuery1.ParamByName('id').AsInteger := TargetID;
FDQuery1.Open;
if not FDQuery1.IsEmpty then
DBGrid1.SetFocus
else
ShowMessage('未找到 ID: ' + IntToStr(TargetID));
end;
end;
📝 完整功能实现(推荐方案)
1. 界面设计建议
添加 TEdit 控件(Edit_ID)用于输入 ID
添加 TButton 按钮(Btn_FindID)用于执行定位
2. 完整代码示例
procedure TForm1.Btn_FindIDClick(Sender: TObject);
var
TargetID: Integer;
begin
TargetID := StrToIntDef(Edit_ID.Text, 0);
if TargetID <= 0 then
begin
ShowMessage('请输入有效的数字 ID');
Edit_ID.SetFocus;
Exit;
end;
// 方法:使用 Locate 快速定位
if FDQuery1.Locate('id', TargetID, []) then
begin
// 确保 DBGrid 获得焦点
DBGrid1.SetFocus;
// 可选:将选中的行居中显示
DBGrid1.SelectedField := FDQuery1.FieldByName('id');
ShowMessage('已定位到 ID: ' + IntToStr(TargetID));
end
else
begin
ShowMessage('未在表中找到 ID: ' + IntToStr(TargetID));
end;
end;
// 也可以添加回车键快速定位
procedure TForm1.Edit_IDKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then // 回车键
begin
Btn_FindIDClick(Sender);
Key := #0;
end;
end;
⚠️ 注意事项
问题 解决方案
ID 字段类型不是整数 使用 AsString 或 AsFloat
大数据量时性能差 添加索引或使用方法三
多用户并发 使用事务或刷新数据
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.064451932907104 seconds