秋·风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  278 随笔 :: 0 文章 :: 308 评论 :: 20万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
在lazarus使用memdataset时,如果filter按下面的方法是得不到想要结果:
  MEMDataSet1.Filtered:=false;
  MEMDataSet1.Filter:=' taskname Like '+quotedstr('%'+Edit4.Text+'%');  
  MEMDataSet1.Filtered:=true;

最后在官网找到解决办法:

复制代码
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  SysUtils, memds, db, Forms, DBGrids, StdCtrls;

type

{ TForm1 }

  TForm1 = class(TForm)
     dataSource: TDataSource;
     dbGrid: TDBGrid;
     MemDataset1: TMemDataset;
     procedure FilterRecordHandler(DataSet: TDataSet; var Accept: Boolean);
     procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  with MemDataset1 do
  begin
    FieldDefs.Add( 'id', ftInteger );
    FieldDefs.Add( 'Nombre', ftString, 255);
    OnFilterRecord:=@FilterRecordHandler;
    FilterOptions:=[foCaseInsensitive]; // change this to suit your requirements
    Active:=True;

    for i:= 0 to 200 do
    begin
      Append;
      FieldByName('id').AsInteger:= i;
      FieldByName('nombre').AsString:= 'nombre_' + IntToStr( i );
      Post;
    end;

    Filter:='11';
    Filtered:=True;
    Close; // force a rescan of table data with filter in place
    Open;
  end;
end;

procedure TForm1.FilterRecordHandler(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept:=Pos(DataSet.Filter, DataSet.FieldByName('Nombre').AsString) > 0;
end;

end.
复制代码

 

过滤前:

过滤后:

 

posted on   秋·风  阅读(242)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示