Delphi 实现cxGrid动态创建列,并为某列内嵌下拉框

Delphi 实现cxGrid动态创建列,并为某列内嵌下拉框


一、动态创建列
方法1:
var i: Integer;
  Column: TcxGridDBColumn;
  cxView: TcxGridDBTableView;  
begin
  cxView := Self.Levels[0].GridView as TcxGridDBTableView;
  if cxView.DataController.DataSource <> nilthenif cxView.DataController.DataSource.DataSet <> nilthenbegin
      cxView.ClearItems;
      for i:=0 to  cxView.DataController.DataSource.DataSet.FieldCount-1 dobegin
         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 dobegin   
  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;

 

联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678