2017-11-11 34 views
0

我已经尝试使用cxGrid和TcxPopEdit来创建checkedComboBox,并且我实现了检查列表中的每个复选框,并在PopupEdit中显示选中的值。使用TcxPopUpEdit

为了扩展它,我为GridView添加了一个PopupMenu。

现在,有两个按钮说全选,全部清除popupmenu,当我右键GridView并说选择它应该检查所有的复选框,当我说清除所有它应该取消所有复选框。

任何人都可以请建议我一些想法实现这一目标? 顺便说一下,我们使用Dev Express 5.15(Express QuantumGrid v5.15等)和Borland Delphi 6作为开发IDE。

我附上我的应用程序外观的截图。 App ScreenShot 这里是我为此执行的源代码从DropBox获取示例项目。 SampleProject

+0

SO不是代码编写服务。我们很乐意回答您可能针对您的实施*提出的具体问题。你为什么不自己做,实际的问题是什么?另外,你已经是一个足够长的成员,知道一个问题的所有细节必须包含在问题本身中。外部链接可能会停止工作,从而使您的问题对于未来的读者毫无价值。 –

+0

我只想提出一些关于如何处理我的需求的建议。我正在尝试。 – userhi

+1

我没有下载你的DropBox代码,但是...最简单的方法是简单地遍历数据集(在Disable-和EnableControls之间的括号内),设置或清除填充复选框的字段。 – MartynA

回答

4

下面的代码将设置或清除与连接到网格数据源的数据集中名为'标记'的字段关联的复选框。如果这不是你想要做的,你需要在你的q中更具体。你的项目代码

procedure TForm1.ProcessCheckboxes(SetCB : Boolean); 
var 
    ADataSet : TDataSet; 
    BM : TBookmark; 
    Field : TField; 
begin 
    ADataSet := DataSource1.DataSet; 
    Field := ADataSet.FieldByName('Marked') 
    BM := ADataSet.GetBookmark; // Place a bookmark on the dataset so that the 
    // same row stays current 
    try 
    ADataSet.DisableControls; // temporarily prevent the grid from being updated on-screen 
    ADataSet.First; 
    while not ADataSet.Eof do begin 
     ADataSet.Edit; 
     if SetCB then 
     Field.Value := True 
     else 
     Field.Value := False; 
     ADataSet.Post; 
     ADataSet.Next; 
    end; 
    finally 
    ADataSet.GoToBookMark(BM); // go back to the row where we placed the bookmark 
    ADataSet.FreeBookMark(BM); 
    ADataSet.EnableControls; 
    end; 
end; 
1

基地,我写一些代码,非常接近@MartynA答案,但你的codes.I基地没有测试他们,但你需要的主要逻辑是在这两个答案。为此,您必须更改数据而不是直接更改组件属性。

procedure TfrmCXPopUpEdit.CheckAll1Click(Sender: TObject); 
Var 
    ADataSet : TDataSet; 
    bm : TBookmark; 
begin 
    bm := CDS_LookUp.GetBookmark; 
    CDS_LookUp.DisableControls; 
    CDS_LookUp.first; 
    while not CDS_LookUp.eof do 
    begin 
     CDS_LookUp.edit; 
     CDS_LookUpDBFLAG.AsBoolean := true; 
     CDS_LookUp.post; 
     CDS_LookUp.next; 
    end; 
    CDS_LookUp.GoToBookMark(bm); 
    CDS_LookUp.FreeBookMark(bm); 
    CDS_LookUp.EnableControls; 
end; 

procedure TfrmCXPopUpEdit.ClearAll1Click(Sender: TObject); 
Var 
    ADataSet : TDataSet; 
    bm : TBookmark; 
begin 
    bm := CDS_LookUp.GetBookmark; 
    CDS_LookUp.DisableControls; 
    CDS_LookUp.first; 
    while not CDS_LookUp.eof do 
    begin 
     CDS_LookUp.edit; 
     CDS_LookUpDBFLAG.AsBoolean := false; 
     CDS_LookUp.post; 
     CDS_LookUp.next; 
    end; 
    CDS_LookUp.GoToBookMark(bm); 
    CDS_LookUp.FreeBookMark(bm); 
    CDS_LookUp.EnableControls; 
end;