//============================================================================== //DBGrid.根据选择的字段过滤***************************************************** //============================================================================== procedure TexDockForm.DBGridSelectFilter(Sender: TObject); var FilterStr: string; begin with (((Sender as TMenuItem).Owner as TPopupMenu).PopupComponent as TDBGrid) do begin FilterStr := SelectedField.FieldName + ' = ''' + SelectedField.AsString + ''''; if DataSource.DataSet.Filter='' then DataSource.DataSet.Filter := FilterStr else if Pos(FilterStr, DataSource.DataSet.Filter)<=0 then DataSource.DataSet.Filter := DataSource.DataSet.Filter + ' and ' + FilterStr else FilterStr := ''; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DataSource.DataSet.Filtered := true; TRowCountThread.Create(((Sender as TMenuItem).Owner as TPopupMenu).PopupComponent as TDBGrid); end; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ with (Sender as TMenuItem) do begin if Count=0 then begin Add(TMenuItem.Create(Owner as TPopupMenu)); Items[Count-1].Caption := '撤销过滤'; Items[Count-1].OnClick := DBGridCancelFilter; end; if Length(FilterStr)>0 then begin Add(TMenuItem.Create(Owner as TPopupMenu)); Items[Count-1].Caption := FilterStr; Items[Count-1].OnClick := DBGridRecedeFilter; end; end; end;
选中的每一行对应相应的TBookMark对象,你从这个方向去想想吧!
//DBGrid.根据选择的字段过滤*****************************************************
//==============================================================================
procedure TexDockForm.DBGridSelectFilter(Sender: TObject);
var FilterStr: string;
begin
with (((Sender as TMenuItem).Owner as TPopupMenu).PopupComponent as TDBGrid) do
begin
FilterStr := SelectedField.FieldName + ' = ''' + SelectedField.AsString + '''';
if DataSource.DataSet.Filter=''
then DataSource.DataSet.Filter := FilterStr
else if Pos(FilterStr, DataSource.DataSet.Filter)<=0
then DataSource.DataSet.Filter := DataSource.DataSet.Filter + ' and ' + FilterStr
else FilterStr := '';
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DataSource.DataSet.Filtered := true;
TRowCountThread.Create(((Sender as TMenuItem).Owner as TPopupMenu).PopupComponent as TDBGrid);
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
with (Sender as TMenuItem) do
begin
if Count=0 then
begin
Add(TMenuItem.Create(Owner as TPopupMenu));
Items[Count-1].Caption := '撤销过滤';
Items[Count-1].OnClick := DBGridCancelFilter;
end;
if Length(FilterStr)>0 then
begin
Add(TMenuItem.Create(Owner as TPopupMenu));
Items[Count-1].Caption := FilterStr;
Items[Count-1].OnClick := DBGridRecedeFilter;
end;
end;
end;
简单