//Delete按钮的OnClick事件为: procedure TfmSimple.sbDeleteClick(Sender: TObject); begin if dsMaster.DataSet.State = dsBrowse then begin if Application.MessageBox('您确定要删除这笔数据吗?', MB_YesNo+Mb_IconQuestion) = IDYes) then dsMaster.DataSet.Delete else Exit; end; end;
//自定义方法SetButton的实现: procedure TfmSimple.SetButton; begin ... if dsMaster.DataSet.State in [dsInsert, dsEdit] then //当数据集是“插入”和“修改”状态时,不能进行“编辑”和“删除”操作 begin sbEdit.Enabled := False; sbDelete.Enabled := False; end else //当数据集是“浏览”状态并且当前记录不是“首笔”或“末笔”记录时,可以进行“编辑”和“删除”操作 begin sbEdit.Enabled := ((dsMaster.DataSet.State in [dsBrowse]) and (not dsMaster.DataSet.Eof) or (not dsMaster.DataSet.Bof)); sbDelete.Enabled := ((dsMaster.DataSet.State in [dsBrowse]) and (not dsMaster.DataSet.Eof) or (not dsMaster.DataSet.Bof)); end; ... end;
//TDataSource的OnStateChange事件为: procedure TfmSimple.dsMasterStateChange(Sender: TObject); begin ...//这里也有代码,在此省略 if dsMaster.DataSet.State = dsBrowse then begin //dsMaster.DataSet在浏览模式 if dsMaster.DataSet.RecordCount > 0 then begin //前端有数据 fmMain.StatusBar1.Panels[1].Text := '浏览数据'; fmMain.StatusBar1.Panels[3].Text := 'Ctrl+Del删除 F3新增 F4修改 F12离开'; end else begin //前端无数据 fmMain.StatusBar1.Panels[1].Text := '当前无数据'; fmMain.StatusBar1.Panels[3].Text := '离开F12 新增F3'; end; end; end;