目的:为了不太依赖设计时添加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;
暂时解决问题!具体原因有时间再搞。。。
//代码基本来自网上