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