Delphi DBGrid1 游标移动到指定 ID  
官方Delphi 学习QQ群: 682628230(三千人)\n
频道

Delphi DBGrid1 游标移动到指定 ID


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