Delphi 如何从数据集中一次删除两个同名项?

Delphi 如何从数据集中一次删除两个同名项?,delphi,Delphi,我在Twwgrid中有一个列表,如下所示: 如上图所示,我希望通过右键单击弹出菜单立即删除同一库存(例如,删除两种奥利奥巧克力奶油,即CTN或UNIT)。但现在我只能用下面的代码逐个删除,有什么办法解决这个问题吗 procedure Tfrm1.mniDeleteClick(Sender: TObject); begin inherited; with grdItems.DataSource.DataSet do begin if (RecordCount <&g

我在Twwgrid中有一个列表,如下所示:

如上图所示,我希望通过右键单击弹出菜单立即删除同一库存(例如,删除两种奥利奥巧克力奶油,即CTN或UNIT)。但现在我只能用下面的代码逐个删除,有什么办法解决这个问题吗

procedure Tfrm1.mniDeleteClick(Sender: TObject);
begin
  inherited;
    with grdItems.DataSource.DataSet do begin
      if (RecordCount <> 0) and (MessageBox( Application.Handle, 'Delete Record ?', 'Confirmation', MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_APPLMODAL) = IDYES) then
         Delete;
    end;
end;
程序Tfrm1.mniDeleteClick(发送方:TObject);
开始
继承;
使用grdItems.DataSource.DataSet开始
如果(RecordCount 0)和(MessageBox(Application.Handle,'Delete Record?','Confirmation',MB_YESNO+MB_iconquest+MB_DEFBUTTON2+MB_APPLMODAL)=idies),那么
删除;
结束;
结束;

我假设数据集是按库存排序的,如果不是,它将无法工作

procedure Tfrm1.DeleteByStockNum();
var
  StockN: string;
  DataSet: TDataSet;
begin
  DataSet := grdItems.DataSource.DataSet;
  DataSet.DisableControls;
  try
    StockN := DataSet.Fields[0].AsString;
    //locating the very first record with this stock #
    while (not DataSet.BOF) and
          (DataSet.Fields[0].AsString = StockN) do
      DataSet.Previous;
    if DataSet.Fields[0].AsString <> StockN then
      //we are one record above
      DataSet.Next;
    //lets delete all the matching records
    while (not DataSet.IsEmpty)
           and (DataSet.Fields[0].AsString = StockN) do
      DataSet.Delete;
  finally
    DataSet.EnableControls;
  end;
end;


procedure Tfrm1.mniDeleteClick(Sender: TObject);
begin
  inherited;
    with grdItems.DataSource.DataSet do begin
      if (RecordCount <> 0) and (MessageBox( Application.Handle, 'Delete Record ?', 'Confirmation', MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_APPLMODAL) = IDYES) then
         DeleteByStockNum;
    end;
end;
过程Tfrm1.DeleteByStockNum();
变量
StockN:字符串;
数据集:TDataSet;
开始
数据集:=grdItems.DataSource.DataSet;
DataSet.DisableControls;
尝试
StockN:=数据集。字段[0]。关联字符串;
//查找此股票的第一条记录#
而(不是DataSet.BOF)和
(DataSet.Fields[0].AsString=StockN)do
数据集.以前;
如果DataSet.Fields[0].关联字符串StockN,则
//我们是一个以上的记录
数据集。下一步;
//让我们删除所有匹配的记录
while(不是DataSet.IsEmpty)
和(DataSet.Fields[0].AsString=StockN)do
数据集。删除;
最后
DataSet.EnableControls;
结束;
结束;
过程Tfrm1.mniDeleteClick(发送方:TObject);
开始
继承;
使用grdItems.DataSource.DataSet开始
如果(RecordCount 0)和(MessageBox(Application.Handle,'Delete Record?','Confirmation',MB_YESNO+MB_iconquest+MB_DEFBUTTON2+MB_APPLMODAL)=idies),那么
DeleteByStockNum;
结束;
结束;

享受。:)

这真是帮了大忙。非常感谢!:)