问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在cxgrid中添加checkbox

发布网友 发布时间:2023-04-12 01:00

我来回答

1个回答

热心网友 时间:2023-09-29 02:51

1,添加单元文件cxCheckBox,窗体添加clientDataset,datasource,adoquery,cxgrid

2,添加类声明

type
TCheckBoxClickEvent=procere(Sender: TObject) of object;
type
TCheckBoxClick = class(TObject)
private
FOnCheckBoxClick:TCheckBoxClickEvent; //定义一个内部事件,private里的只能在类内部调用
public
property View_UpCheckBoxColumnPropertiesChange:TCheckBoxClickEvent read FOnCheckBoxClick write FOnCheckBoxClick; //定义一个外部的事件
end;

在public中,添加方法

procere View_UpCheckBoxColumnPropertiesChange(Sender: TObject);

3方法实现,根据checkbox状态设置语句

procere Tfrm_w_checker.View_UpCheckBoxColumnPropertiesChange(Sender: TObject);
begin
////////////////////////////////////////////////////
if dw_checker2.Focused = true then
if (Sender as TcxCheckBox).checked then
begin
//dw_add_job.Controller.FocusedColumn.Tag := 1;
dw_checker2.ViewData.Rows[dw_checker2.Controller.FocusedRowIndex].Values[0]:= true;
checker := '1';
doctor := trim(dw_checker2.ViewData.Rows[dw_checker2.Controller.FocusedRowIndex].Values[4]);
end
else
begin
// dw_add_job.Controller.FocusedColumn.Tag := 0;
dw_checker2.ViewData.Rows[dw_checker2.Controller.FocusedRowIndex].Values[0]:= false;
checker := '0';
doctor := '';
end;
end;

4.formshow中生成cxgrid如下

str_sql := 'SELECT tblxt_role.role_name,tblxt_user.user_name,tblzy_adtward.ward_name,tblxt_user.user_code,';
str_sql := str_sql + 'tblxt_user.ward_code,tblxt_user.role_code ';
str_sql := str_sql + ' FROM tblxt_role,tblxt_user,tblzy_adtward ';
str_sql := str_sql + ' WHERE ( tblxt_role.role_code = tblxt_user.role_code ) and ';
str_sql := str_sql + ' ( tblxt_user.ward_code = tblzy_adtward.ward_code ) and ';
str_sql := str_sql + ' (tblxt_user.delete_flag = 0 OR tblxt_user.delete_flag = null ) AND ';
str_sql := str_sql + ' tblxt_user.check_flag= 1 and tblxt_user.ward_code = :ward_code AND ';
str_sql := str_sql + ' tblxt_role.subsys = ''ys'' AND tblxt_role.role_name <> ''*'' ORDER BY tblxt_role.role_code ASC';
with qry_dw_checker2 do
begin
close;
sql.Clear;
sql.Add(str_sql);
Parameters.ParamByName('ward_code').Value := gv_ward_code;
open;
end;
ClientDataSet2.FieldDefs.Clear;
for i:=0 to qry_dw_checker2.FieldCount-1 do
begin
with ClientDataSet2.FieldDefs.AddFieldDef do
begin
Name:=qry_dw_checker2.Fields[i].DisplayName;
if qry_dw_checker1.Fields.Fields[i].DataType=ftAutoInc then
DataType:=ftInteger
else if qry_dw_checker1.Fields.Fields[i].DataType=ftWideString then
DataType:=ftString
else
DataType :=qry_dw_checker2.Fields.Fields[i].DataType;//取原数据字段数据类型
Size:=qry_dw_checker2.Fields.Fields[i].Size;
end;
end;
ClientDataSet2.CreateDataSet;
ds_checker2.DataSet := qry_dw_checker2;
dw_checker2.DataController.DataSource := ds_checker2;

dw_checker2.ClearItems;
dw_checker2.CreateColumn;//建立一个没绑定的列
dw_checker2.Columns[0].Caption:='选择';
dw_checker2.DataController.CreateAllItems;//建立所有绑定的列
// dw_checker1.Columns[0].DataBinding.FieldName := 'flag';
dw_checker2.Columns[0].Width:=45;

//下列5行语句是为了让没绑定列成为 CheckBox :
dw_checker2.DataController.KeyFieldNames:='user_code';
dw_checker2.DataController.MasterKeyFieldNames := 'user_code';
dw_checker2.DataController.DetailKeyFieldNames := 'user_code';
dw_checker2.DataController.DataModeController.SmartRefresh:=true;
dw_checker2.Columns[0].DataBinding.ValueType:='Boolean';
dw_checker2.Columns[0].PropertiesClass:= TcxCheckBoxProperties;
(dw_checker2.Columns[0].Properties as TcxCheckBoxProperties).NullStyle:=nssUnchecked;
//由于CheckBox列是动态列,所以需要给其关联一个OnChange的事件:
(dw_checker2.Columns[0].Properties as TcxCheckBoxProperties).OnChange:=View_UpCheckBoxColumnPropertiesChange;//关联事件
dw_checker2.OptionsView.Indicator:=true;
dw_checker2.OptionsView.NoDataToDisplayInfoText := '';

5.定义单击事件

a.令checkbox单选

procere Tfrm_w_checker.dw_checker2CellClick(Sender: TcxCustomGridTableView;
ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
AShift: TShiftState; var AHandled: Boolean);
var
Row: Integer;
begin
inherited;
//单选
for Row:=0 to dw_checker2.DataController.RecordCount-1 do
begin
dw_checker2.ViewData.Records[Row].Values[0] := False;
end;
end;

b.令checkbox多选

procere Tfrm_w_add_job.dw_add_jobMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Row: Integer;
begin
inherited;
//多选
if dw_add_job.DataController.RecordCount<>0 then
begin
Row := dw_add_job.DataController.FocusedRecordIndex;

if dw_add_job.ViewData.Records[Row].Values[1] = True then
dw_add_job.ViewData.Records[Row].Values[1] := False
else
dw_add_job.ViewData.Records[Row].Values[1] := True;
end;
end;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? close-upview的意思是什么 视图变换(view transform)具体是做什么的 急求平面波干涉matlab程序 求三角函数值sinX=0的集合 sin(x)=0,x=? 泰安抗日战争时期的历史资料 历史上的今天:12月27日 买房贷款办不下来定金退吗 核桃能放冰箱吗? 台式机支持minipcie无线网卡吗 台式机软重启pcie掉电吗 戴尔台式机怎么开启pcie 女生身高157体重84斤穿什么型号的衣服 身高157体重105衣服在网上买多大码 192个子的人穿什么样尺码的衬衫? 分享抖音作品时突然没有分享图标路径 六级多少分才显示分数 六级多少分有成绩单 如何让吸烟者戒烟 明年二月份能顺利开学吗 灯谜有哪些种类 大疆T30无人机液位计故障? 介质桶液位计为什么一会显示一会不显示 大疆t30卫星圈地图显示出不来怎么回事? 大疆t30rtk如何定位出水桩 大疆T30无人机液位计故障怎么引起的? 领券的app都有哪些淘宝优质惠返是什么 可乐鸡翅可以用无糖可乐做吗?制作可乐鸡翅需要注意什么? 无糖可乐鸡翅做法 新股中签概率是多少,怎么算的呢? 国内外二手车市场现状对比多大 主题库appoppo答案是什么 17款朗逸1.6自动挡行车记录仪屏幕分辨率怎么调整 吴大恺最著名的画 崇圣寺的诗词崇圣寺的诗词是什么 fastadmin识别银行卡 2月份成年人报名的考试有哪些 赵露思活动生图走红网络,离开10级PS后,这双腿太真实了 2022年重庆自考报名考试时间公布,需要注意什么? 经济师考试报名时间2021年什么时候开始?