如何在cxgrid中添加checkbox.docx

上传人:b****4 文档编号:3836217 上传时间:2023-05-06 格式:DOCX 页数:8 大小:17.16KB
下载 相关 举报
如何在cxgrid中添加checkbox.docx_第1页
第1页 / 共8页
如何在cxgrid中添加checkbox.docx_第2页
第2页 / 共8页
如何在cxgrid中添加checkbox.docx_第3页
第3页 / 共8页
如何在cxgrid中添加checkbox.docx_第4页
第4页 / 共8页
如何在cxgrid中添加checkbox.docx_第5页
第5页 / 共8页
如何在cxgrid中添加checkbox.docx_第6页
第6页 / 共8页
如何在cxgrid中添加checkbox.docx_第7页
第7页 / 共8页
如何在cxgrid中添加checkbox.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

如何在cxgrid中添加checkbox.docx

《如何在cxgrid中添加checkbox.docx》由会员分享,可在线阅读,更多相关《如何在cxgrid中添加checkbox.docx(8页珍藏版)》请在冰点文库上搜索。

如何在cxgrid中添加checkbox.docx

如何在cxgrid中添加checkbox

如何在cxgrid中添加checkbox

如何在cxgrid中添加checkbox2012-11-0620:

43:

04

标签:

checkboxcxgriddelphi

原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。

否则将追究法律责任。

方法一

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

2,添加类声明

type

TCheckBoxClickEvent=procedure(Sender:

TObject)ofobject;

type

TCheckBoxClick=class(TObject)

private

FOnCheckBoxClick:

TCheckBoxClickEvent;//定义一个内部事件,private里的只能在类内部调用

public

propertyView_UpCheckBoxColumnPropertiesChange:

TCheckBoxClickEventreadFOnCheckBoxClickwriteFOnCheckBoxClick;//定义一个外部的事件

end;

在public中,添加方法

procedureView_UpCheckBoxColumnPropertiesChange(Sender:

TObject);

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

procedureTfrm_w_checker.View_UpCheckBoxColumnPropertiesChange(Sender:

TObject);

begin

////////////////////////////////////////////////////

ifdw_checker2.Focused=truethen

if(SenderasTcxCheckBox).checkedthen

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:

='SELECTtblxt_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+'FROMtblxt_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=0ORtblxt_user.delete_flag=null)AND';

str_sql:

=str_sql+'tblxt_user.check_flag=1andtblxt_user.ward_code=:

ward_codeAND';

str_sql:

=str_sql+'tblxt_role.subsys=''ys''ANDtblxt_role.role_name<>''护士''ORDERBYtblxt_role.role_codeASC';

withqry_dw_checker2do

begin

close;

sql.Clear;

sql.Add(str_sql);

Parameters.ParamByName('ward_code').Value:

=gv_ward_code;

open;

end;

ClientDataSet2.FieldDefs.Clear;

fori:

=0toqry_dw_checker2.FieldCount-1do

begin

withClientDataSet2.FieldDefs.AddFieldDefdo

begin

Name:

=qry_dw_checker2.Fields[i].DisplayName;

ifqry_dw_checker1.Fields.Fields[i].DataType=ftAutoIncthen

DataType:

=ftInteger

elseifqry_dw_checker1.Fields.Fields[i].DataType=ftWideStringthen

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].PropertiesasTcxCheckBoxProperties).NullStyle:

=nssUnchecked;

//由于CheckBox列是动态列,所以需要给其关联一个OnChange的事件:

(dw_checker2.Columns[0].PropertiesasTcxCheckBoxProperties).OnChange:

=View_UpCheckBoxColumnPropertiesChange;//关联事件

dw_checker2.OptionsView.Indicator:

=true;

dw_checker2.OptionsView.NoDataToDisplayInfoText:

='';

5.定义单击事件

a.令checkbox单选

procedureTfrm_w_checker.dw_checker2CellClick(Sender:

TcxCustomGridTableView;

ACellViewInfo:

TcxGridTableDataCellViewInfo;AButton:

TMouseButton;

AShift:

TShiftState;varAHandled:

Boolean);

var

Row:

Integer;

begin

inherited;

//单选

forRow:

=0todw_checker2.DataController.RecordCount-1do

begin

dw_checker2.ViewData.Records[Row].Values[0]:

=False;

end;

end;

b.令checkbox多选

procedureTfrm_w_add_job.dw_add_jobMouseUp(Sender:

TObject;

Button:

TMouseButton;Shift:

TShiftState;X,Y:

Integer);

var

Row:

Integer;

begin

inherited;

//多选

ifdw_add_job.DataController.RecordCount<>0then

begin

Row:

=dw_add_job.DataController.FocusedRecordIndex;ifdw_add_job.ViewData.Records[Row].Values[1]=Truethen

dw_add_job.ViewData.Records[Row].Values[1]:

=False

else

dw_add_job.ViewData.Records[Row].Values[1]:

=True;

end;

end;

方法二:

数据库中添加bit字段。

方法三:

鉴于本人首次设定cxGrid的CheckBox的时候费了很大劲,发现很多人都会碰到这个问题,现在总结一下,以供各位互相学习借鉴。

步骤如下(不分先后):

1、cxGrid添加完自己所需的所有字段后,增加一个字段用来显示CheckBox勾选框,比如叫做Selected(至于Caption要不要设定,看你自己喜欢是否想看到栏位名称了),那么tableview中此字段的DataBinding下面的FieldName就设为Selected,并注意Options中的Editing要为True,还要设定Properties属性的ValueChecked属性和ValueUnchecked属性,这里比如分别设定为'Y','N'。

2、设定cxGrid所连接的DataSource对应的ClientDataset,编辑ClientDataset,增加自己正常需要的所有字段,然后再增加一个单独作为我们设定的用来显示勾选的字段,前面已经有名字了'Selected'(宽度设定大于2个字节都可以了,也就是为了保存之前设定的'Y'或者'N',属性是WildString),需要注意的是:

FieldType一定要选择fkInternalCalc,当然FieldName也是'Selected'。

3、在cxGrid的TableView的OnCellDblclick事件中写勾选与否的点击处理代码,比如如下例子:

procedureTfrmImmunIseplanAdd.cxGrid1DBTableView1CellDblClick(

Sender:

TcxCustomGridTableView;

ACellViewInfo:

TcxGridTableDataCellViewInfo;AButton:

TMouseButton;

AShift:

TShiftState;varAHandled:

Boolean);

begin

inherited;

cdsGROWSORT.Edit;

ifcdsGROWSORT.FieldByName('Selected').AsString='N'then

cdsGROWSORT.FieldByName('Selected').AsString:

='Y'

else

cdsGROWSORT.FieldByName('Selected').AsString:

='N';

end;

4、初始化勾选栏位,否则就是灰色的而且已经勾选了,如何初始化,基本上就是遍历ClientDataSet然后把'Selected'字段值赋值为'N',也就是非勾选状态。

比如如下例子:

if(cdsGROWSORT.Active)and(cdsGROWSORT.RecordCount>0)then

begin

cdsGROWSORT.First;

whilenotcdsGROWSORT.Eofdo

begin

cdsGROWSORT.Edit;

cdsGROWSORT.FieldByName('Selected').AsString:

='N';

cdsGROWSORT.Next;

end;

end;

注意:

如果说cxGrid有很多数据记录要在窗口打开的时候就显示出来,那么你的ClientDataset的SQL语句不可以有'Selected'这个字段,也就是说这个字段不在你的数据查询记录中,不和数据库关联。

以上四个步骤不分先后,只要一一都这样设定一定可以实现想要的勾选框了。

第一次写,呵呵,还真是费脑筋,就当作给自己一个加深印象的事情吧,呵呵。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2