求助急急急急急!按某个条件分组后怎么做部分全选

coffee__lover 2014-02-12 03:49:58

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

...全文
335 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
火龙岛主 2014-04-02
  • 打赏
  • 举报
回复
换个控件cxTreeList
coffee__lover 2014-03-26
  • 打赏
  • 举报
回复
引用 2 楼 simonhehe 的回复:
第一个全选是整个table遍历并选中下级. 第二个全选先定位到选中的分组, 然后选中下级.
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,就是对选中的选择框进行操作的时候,提示没有选择 选择框!
coffee__lover 2014-03-26
  • 打赏
  • 举报
回复
引用 6 楼 simonhehe 的回复:
做个判断就可以, 下边是示意代码
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;
if cds_mxlb.FieldByName('dqbm').AsString = 'aaa' then 这段是什么意思啊,aaa 是什么
踏雪无痕 2014-02-14
  • 打赏
  • 举报
回复
我的想法是:点击全选按钮,先取消所有选择,再遍历展开的组,最后选择展开组的数据行
simonhehe 2014-02-14
  • 打赏
  • 举报
回复
做个判断就可以, 下边是示意代码
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;
coffee__lover 2014-02-13
  • 打赏
  • 举报
回复
大侠们帮帮忙啊
coffee__lover 2014-02-13
  • 打赏
  • 举报
回复
引用 2 楼 simonhehe 的回复:
第一个全选是整个table遍历并选中下级. 第二个全选先定位到选中的分组, 然后选中下级.
我第一个全选按钮是这么做的 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;
coffee__lover 2014-02-13
  • 打赏
  • 举报
回复
引用 2 楼 simonhehe 的回复:
第一个全选是整个table遍历并选中下级. 第二个全选先定位到选中的分组, 然后选中下级.
对dephi不是很懂,大神能否简单写下代码给我参考一下
simonhehe 2014-02-13
  • 打赏
  • 举报
回复
第一个全选是整个table遍历并选中下级. 第二个全选先定位到选中的分组, 然后选中下级.
coffee__lover 2014-02-12
  • 打赏
  • 举报
回复
用的是tcxGrid 控件

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧