cxGrid动态创建列+为某列内嵌下拉框

一、动态创建列
方法1:
var i: Integer;
  Column: TcxGridDBColumn;
  cxView: TcxGridDBTableView;  
begin
  cxView := Self.Levels[0].GridView as TcxGridDBTableView;
  if cxView.DataController.DataSource <> nil then
    if cxView.DataController.DataSource.DataSet <> nil then
    begin
      cxView.ClearItems;
      for i:=0 to  cxView.DataController.DataSource.DataSet.FieldCount-1 do 
    	begin
         Column := cxView.CreateColumn;
         Column.DataBinding.FieldName := cxView.DataController.DataSource.DataSet.Fields[i].FieldName;
         Column.PropertiesClass := TcxTextEditProperties;
      end;
    end;
end;
方法2:
for i := 0 to Query.FieldCount - 1 do   
begin   
  cxGrid.CreateColumn;   
  cxGrid.columns[i].DataBinding.FieldName := Query.Fields[i].DisplayName;   
  cxGrid.Columns[i].Caption := 'XXXX';   
  cxGrid.Columns[i].Width   :=80;   
end;
方法3:
cxGrid1DBTableView1.ClearItems;//清空数据  
(cxGrid1DBTableView1.DataController as IcxCustomGridDataController).DeleteAllItems;  //删除所有列  
(cxGrid1DBTableView1.DataController as IcxCustomGridDataController).CreateAllItems(false);//创建数据源中的所有列  
cxGrid1DBTableView1.ApplyBestFit ;//让列宽自适应 .BestFitMaxWidth;  
 

参考资料:

1、https://www.cnblogs.com/railgunman/archive/2010/12/10/1901759.html

2、http://blog.csdn.net/kevinzhaoyp/article/details/26485313

二、为某列内嵌下拉框(一)

网上有很多关于在某列内嵌下拉框的例子,但是可能由于版本的原因或是我初学的原因,我一直没有调试出来。后来直接去看Dev16.2.5的帮助文件才做出来。

这个例子用在这样一个情况下:

职务表A02(A02_1:职务编号,A02_4:职务名称) ;

操作员信息表B00(B00_4:职务编号);

其中A02_1与B00_4对应,形成主/从关系。

cxgdbtvB00.CreateColumn;//为cxGridDBTableView动态创建一列

  cxgdbtvB00.columns[3].DataBinding.FieldName := 'B00_4';//指定列关联的字段

  cxgdbtvB00.Columns[3].Caption := '职务';//指定列的表头名称
  cxgdbtvB00.Columns[3].Width   :=200;//列的宽度
  cxgdbtvB00.Columns[3].PropertiesClass := TcxLookupComboBoxProperties;//指定列为下拉框编辑型式

  //下面设定下拉框的属性

  With TcxLookupComboBoxProperties(cxgdbtvB00.Columns[3].Properties) do

  begin
    ListSource := dsA02_;//下拉框连接的数据源
    KeyFieldNames := 'A02_1';//数据表中的关键字段
    ListFieldNames := 'A02_4';//用于显示在cxGrid,代替其关联数据源中指定的字段'B00_4'的字段
    ListOptions.ShowHeader:=False;//下拉框不显示表头

  end;

效果如下图:

三、为某列内嵌下拉框(二)

有些时候,某个字段的值有一定的范围(值域),但并没有保存在数据表中,也即是说,上面的例子并不适用。

我想达到的效果是焦点在这个字段时,有一个下拉列表框,并可以在其中显示可以选择的值。

操作步骤如下:

1、使用TcxEditRepository控件, 增加一个combobox(如名称为cxCB), 做好设置;

2、绑定列cxgdbtvB22.Columns[i].RepositoryItem:=cxCB;

效果如下图:

四、直接指定某列的PropertiesClass属性为combobox;然后为填Items。

代码如下,其中cxgrid中的列控件名为cxgdbtvcB12_67。

cxgdbtvcB12_67.PropertiesClass:=TcxComboBoxProperties;
  with TcxComboBoxProperties(cxgdbtvcB12_67.Properties),A01F.qB90_3 do
  begin
    Items.Clear;
    First;
    while not eof do
    begin
      Items.add(FieldByName('B90_3').AsString);
      Next;
    end;
  end;

另一种写法是:

(cxgdbtvcB12_67.Properties as TcxComboBoxProperties).Items

参考文档:

1、Dev16.2.5帮助文件:ExpressEditors.chm中《Using Lookup Columns》;

2、淡淡的风QQ16643506的《疯狂Delphi 之数据库开发技术012》

3、关于cxGrid针对于某一列转属性成Combobox后对于Items添加内容用代码的写法_cxgrid 代码设置 items-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值