本来是上图这样,点击左边这个全选,可以选择按钮全部全选
现在比如按照省编码分组之后,在捕捉到点击+号,点击下图
全选按钮,把+号下面的选择框全选
请教dephi大神,给个思路该怎么做,或者给下代码,3QQQQQQQQ

解决方案 »

  1.   

    用的是tcxGrid 控件
      

  2.   

    第一个全选是整个table遍历并选中下级.
    第二个全选先定位到选中的分组, 然后选中下级.
      

  3.   


    对dephi不是很懂,大神能否简单写下代码给我参考一下
      

  4.   

    我第一个全选按钮是这么做的
    procedure TfrmFymxsh.cb_select_allPropertiesEditValueChanged(
      Sender: TObject);
    begin
      inherited;
      if cds_mxlb.RecordCount = 0 then
        cb_select_all.Checked := false;
      cds_mxlb.DisableControls;
      if cb_select_all.Checked then   //全选
      begin
        cds_mxlb.First;
        while not cds_mxlb.Eof do
        begin
        cds_mxlb.Edit;
        cds_mxlb.FieldByName('select').AsBoolean := true;
        cds_mxlb.Post;
        cds_mxlb.Next;
        end;
      end
      else    //全不选
      begin
        cds_mxlb.First;
        while not cds_mxlb.Eof do
        begin
          cds_mxlb.Edit;
          cds_mxlb.FieldByName('select').AsBoolean := false;
          cds_mxlb.Post;
          cds_mxlb.Next;
        end;
      end;
      cds_mxlb.EnableControls;
      cds_mxlb.First;
    end;
      

  5.   

    做个判断就可以, 下边是示意代码procedure TfrmFymxsh.cb_select_allPropertiesEditValueChanged(
      Sender: TObject);
    begin
      inherited;
      if cds_mxlb.RecordCount = 0 then
        cb_select_all.Checked := false;
      cds_mxlb.DisableControls;
      if cb_select_all.Checked then   //全选
      begin
        cds_mxlb.First;
        while not cds_mxlb.Eof do
        begin
        cds_mxlb.Edit;
        cds_mxlb.FieldByName('select').AsBoolean := true;
        cds_mxlb.Post;
        cds_mxlb.Next;
        end;
      end
      else
      if cb_select_Curr.Checked then   //选中当前
      begin
        cds_mxlb.First;
        while not cds_mxlb.Eof do
        begin
         //如果明显表中的地区编码等于当前选中的分组编码, 则选中
         if cds_mxlb.FieldByName('dqbm').AsString = 'aaa' then
         begin
        cds_mxlb.Edit;
        cds_mxlb.FieldByName('select').AsBoolean := true;
        cds_mxlb.Post;
         end;
         cds_mxlb.Next;
        end;
      end
      else    //全不选
      begin
        cds_mxlb.First;
        while not cds_mxlb.Eof do
        begin
          cds_mxlb.Edit;
          cds_mxlb.FieldByName('select').AsBoolean := false;
          cds_mxlb.Post;
          cds_mxlb.Next;
        end;
      end;
      cds_mxlb.EnableControls;
      cds_mxlb.First;
    end;
      

  6.   


    if cds_mxlb.FieldByName('dqbm').AsString = 'aaa' then   这段是什么意思啊,aaa 是什么
      

  7.   


    procedure TfrmFymxsh.cxchckbx1PropertiesEditValueChanged(
      Sender: TObject);
    var
      i: Integer;
    begin
        inherited;
       if cxchckbx1.Checked then          //全选
        begin
          for i := 0 to Grd_mxlbDBTV.ViewData.RowCount-1 do begin
           if Grd_mxlbDBTV.ViewData.Rows[i].IsData then
             Grd_mxlbDBTV.ViewData.Rows[i].Values[0]:=true;
          end;
        end
       else    //反选
       begin
          for i := 0 to Grd_mxlbDBTV.ViewData.RowCount-1 do begin
           if Grd_mxlbDBTV.ViewData.Rows[i].IsData then
             Grd_mxlbDBTV.ViewData.Rows[i].Values[0]:=false;
          end;
       end;
    end; 我现在就写成这样了,能选中展开分组下的选择框。但是有个bug,就是对选中的选择框进行操作的时候,提示没有选择 选择框!
      

  8.   

    换个控件cxTreeList