我第一个全选按钮是这么做的 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;
做个判断就可以, 下边是示意代码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 是什么
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,就是对选中的选择框进行操作的时候,提示没有选择 选择框!
第二个全选先定位到选中的分组, 然后选中下级.
对dephi不是很懂,大神能否简单写下代码给我参考一下
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;
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 是什么
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,就是对选中的选择框进行操作的时候,提示没有选择 选择框!