博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

cxGrid动态创建带CheckBox列时遇到的问题...

Posted on 2011-07-19 19:04  对镜弹箜篌  阅读(956)  评论(0编辑  收藏  举报

目的:为了不太依赖设计时添加cxGrid列并绑定数据,决定动态创建cxGrid列,其中CheckBox未绑定数据集

代码

 1 // 动态创建GridView
2 procedure MyClass.initializecxMyGoods(cxGrid_DBTableView1:TcxGridDBTableView);
3 begin
4
5 cxGrid_DBTableView1.DataController.DataModeController.GridMode
6 := False;
7 cxGrid_DBTableView1.DataController.DataModeController.
8 SmartRefresh := True;
9 // 设置主键
10 cxGrid_DBTableView1.DataController.KeyFieldNames := 'ID';
11
12 with cxGrid_DBTableView1.CreateColumn do
13 begin
14 Name := 'colUnbound';
15 Caption := '选择';
16 DataBinding.ValueTypeClass := TcxBooleanValueType;
17 PropertiesClass := TcxCheckBoxProperties;
18 MinWidth := 40;
19 with TcxCheckBoxProperties(Properties) do
20 begin
21 AllowGrayed := False;
22 ValueChecked := True;
23 ValueUnchecked := False;
24 NullStyle := nssUnchecked;
25 //绑定事件,如果不取消checkbox焦点,拖拽分组时出现错误提示:Privileged instruction 
26 OnChange := CancleFocuse;
27 end;
28 end;
29
30 with cxGrid_DBTableView1.CreateColumn do
31 begin
32 Caption := '商品名称';
33 DataBinding.FieldName := 'name';
34 MinWidth := 100;
35 end;
36 //创建用来显示文本
37 with cxGrid_DBTableView1.CreateColumn do
38 begin
39 Caption := '备注';
40 DataBinding.FieldName := 'note';
41 DataBinding.ValueType := 'Variant';
42 PropertiesClass := TcxBlobEditProperties;
43 with TcxBlobEditProperties(Properties) do
44 begin
45 BlobEditKind := bekMemo;
46 BlobPaintStyle := bpsText;
47 end;
48 MinWidth := 40;
49 end;
50
51 end;

当改变checkbox时,若焦点不转移到其他列则出现 Privileged instruction错误!

具体原因还未找到,临时解决方案 在CheckBox的OnChange事件中解除焦点 : cxGrid_mygoodsDBTableView1.Focused := False;

onCancle:

1 procedure MyClass.CancleFocuse(Sender: TObject);
2 begin
3 // 释放焦点 (解决分组时出现的指令越界 , 问题不明,未从根本解决)
4 cxGrid_DBTableView1.Focused := False;
5 end;

暂时解决问题!具体原因有时间再搞。。。 

//代码基本来自网上