各位大侠,我正在学习DELPHI编程,我发现DELPHI在DBGrid中并没提供一个全文查找并定位的功能。具体功能如下:在DBGrid显示一个数据表后,按下查找按钮,弹出一个窗口,输入关键字后,可在DBGrid所显示的任意字段中进行模糊查找,找到后焦点定位在目标单元格中;此时按下继续查找按钮,则可继续查找下去。这样的功能是否有相应的控件,如没有,有无实现的办法及其原理?谢谢各位了!

解决方案 »

  1.   

    我从来没有觉得需要在DBGrid中这样实现,也没有想过怎么实现。最终是可以实现的,但是我觉得是在缘木求鱼,你可以自己对DataSet处理啊。
    你的查找无非是对几个特定字段查找吧,对Dataset进行特殊处理,寻址到记录,DBGrid自己会定位的。
      

  2.   

    Query.Locate('field1;field2',VarArrayOf
      ([value,value]),[])
      

  3.   

    自己改改吧
       DBG : TDBGrid;
       i : Integer;
       if LabelMessage.Visible then
          LabelMessage.Visible := False;
       if DBG.DataSource.DataSet.Eof then
          DBG.DataSource.DataSet.First
       else
          DBG.DataSource.DataSet.Next;
       while not DBG.DataSource.DataSet.Eof do
       begin
          for i:=0 to DBG.Columns.Count-1 do
          begin
             if Pos(EditFind.Text,DBG.Columns.Items[i].Field.DisplayText)>0 then
             begin
               DBG.SelectedIndex := i;
               ButtonOk.Caption := '下一个';
               Exit;
             end;
          end;
          DBG.DataSource.DataSet.Next;
       end;
       ButtonOk.Caption := '从头开始';
       LabelMessage.Visible := True;
      

  4.   

    感谢各位相助,特别感谢waysoft(华子)您, 你的代码我试过了, 基本可以通过,但还有一个问题: 就是不能查找数据字段中的内容! 有无更好的改进?
      

  5.   

    我已经找到原因了, 只要将判断语句中的"Pos(EditFind.Text,DBG.Columns.Items[i].Field.DisplayText)>0 "改为: Pos(EditFind.Text,DBG.Columns[i].Field.AsString)>0" 即可。
      waysoft(华子),谢谢您了!