cxGridI动态连接数据源 cxgrid能不能象dbgrid一样,不用建立规定的字段,连接数据源后就直接显示,我是想用一个cxgrid动态的连接多个数据源。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <转贴>cxGrid如何动态创建Items的Editor的项? cxGrid的列有一个属性,它的编辑框可以指定combobox,spinedit等.在设计时,可以为 combobox的items添加项目.请问是否可以动态创建?(run-time时由程序加入) 解决: var A:TDataSource: B:TcxlookupcomboboxProperties; begin A:=TDataSource.create(self); B:=tcxlookupcomboboxproperties.create(self); A.Dataset:=Dic_ry_xb;//此处指定数据源。 b.listdource:=a;//此处指明字段的listsource属性。 b.keyfieldnames:='a'; //此处指明字段的关键字段 b.listfieldnames:='b'; //此处指明字段的返回值。 b.listcolumns.items[0].caption:='x; //此处默认是会建立一个字段,但是显示的表头是name,所以此处让它显示为自己想要的中午显示。 cxGrid1DBTableView1c1_sex_code.Properties:=b; //此处指明是那个字段。 end; //这个是初始化的代码, 给一段代码让你参考: //显示Grid内容 tvResult.BeginUpdate; tvResult.Bands.Clear; LeftBand := tvResult.Bands.Add; LeftBand.FixedKind := fkLeft; LeftBand.Options.Sizing := False; RightBand := tvResult.Bands.Add; RightBand.Options.Sizing := False; tvResult.ClearItems; tvResult.DataController.CreateAllItems; tvResult.EndUpdate; tvResult.BeginUpdate; for i := 0 to tvResult.ColumnCount - 1 do begin GridColumn := tvResult.Columns[i]; Field := GridColumn.DataBinding.Field; //手动设置PropertiesClass,以便使右键菜单出现'对齐'功能 //Int型字段的PropertiesClass会自动设置为TcxMaskEditProperties case Field.DataType of ftString: begin GridColumn.DataBinding.ValueTypeClass := TcxStringValueType; GridColumn.PropertiesClass := TcxTextEditProperties; end; ftWideString: begin GridColumn.DataBinding.ValueTypeClass := TcxWideStringValueType; GridColumn.PropertiesClass := TcxTextEditProperties; end; ftInteger, ftAutoInc: begin GridColumn.DataBinding.ValueTypeClass := TcxIntegerValueType; GridColumn.PropertiesClass := TcxMaskEditProperties; end; ftSmallInt: begin GridColumn.DataBinding.ValueTypeClass := TcxSmallIntValueType; GridColumn.PropertiesClass := TcxMaskEditProperties; end; ftLargeInt: begin GridColumn.DataBinding.ValueTypeClass := TcxLargeIntValueType; GridColumn.PropertiesClass := TcxMaskEditProperties; end; ftFloat: begin GridColumn.DataBinding.ValueTypeClass := TcxFloatValueType; GridColumn.PropertiesClass := TcxMaskEditProperties; end; ftCurrency, ftBCD: begin GridColumn.DataBinding.ValueTypeClass := TcxCurrencyValueType; GridColumn.PropertiesClass := TcxCurrencyEditProperties; //货币字段统一显示4位小数 TCurrencyField(Field).DisplayFormat := ',0.0000'; //或者使用 //TcxCurrencyEditProperties(GridColumn.Properties).DisplayFormat := '',0.0000'; end; ftDateTime: begin GridColumn.DataBinding.ValueTypeClass := TcxDateTimeValueType; GridColumn.PropertiesClass := TcxDateEditProperties; //去除日期时间字段中的时间部分 TDateTimeField(Field).DisplayFormat := 'yyyy-mm-dd'; end; ftBoolean: begin GridColumn.DataBinding.ValueTypeClass := TcxBooleanValueType; GridColumn.PropertiesClass := TcxCheckBoxProperties; end; ftBlob: begin GridColumn.DataBinding.ValueTypeClass := TcxObjectValueType; GridColumn.PropertiesClass := TcxBlobEditProperties; end; else begin GridColumn.DataBinding.ValueTypeClass := TcxWideStringValueType; GridColumn.PropertiesClass := TcxTextEditProperties; end; end; //列标题 取最后一个'_'字符后的内容作为列标题 ColumnTitle := GridColumn.Caption; if PosEx('_', ColumnTitle) > 0 then begin sl := FormMain.SplitString(ColumnTitle, '_'); ColumnTitle := sl[sl.Count - 1]; FreeAndNil(sl); if ColumnTitle = '' then ColumnTitle := GridColumn.Caption; end; GridColumn.Caption := ColumnTitle; end; tvResult.EndUpdate; tvResult.BeginUpdate; for i := 0 to 2 do begin tvResult.Columns[i].Position.BandIndex := 0; tvResult.Columns[i].Position.ColIndex := i; end; for i := 3 to tvResult.ColumnCount - 1 do begin tvResult.Columns[i].Position.BandIndex := 1; tvResult.Columns[i].Position.ColIndex := i - 3; end; IniFileName := ExtractFilePath(Application.ExeName) + 'Layout\' + Self.Name + '.ini'; if FileExists(IniFileName) then Self.tvResult.RestoreFromIniFile(IniFileName) else for i := 0 to Self.tvResult.Bands.Count - 1 do Self.tvResult.Bands[i].ApplyBestFit; tvResult.EndUpdate; Delphi开发ActiveX使用定义的属性 在FastReport里能否进行选择性打印??? ******请问如何使用https协议进行通讯?****** 关于grid点击头排序问题! 如何快速把Stream组合起来? 关于位操作的提问 想辞职和朋友搞点生意,请大家帮忙出主意?(下午送分) 我想做个自画按钮,大家提提建议怎么做好? 刚刚入门了,如何能够尽快提升自己的水平? 如何修改Delphi IDE中的编程快捷键? 为什么解决了这个还有那个呢 fastreport预览时换行出现乱码
cxGrid的列有一个属性,它的编辑框可以指定combobox,spinedit等.在设计时,可以为
combobox的items添加项目.请问是否可以动态创建?(run-time时由程序加入) 解决:
var
A:TDataSource:
B:TcxlookupcomboboxProperties;
begin
A:=TDataSource.create(self);
B:=tcxlookupcomboboxproperties.create(self);
A.Dataset:=Dic_ry_xb;//此处指定数据源。
b.listdource:=a;//此处指明字段的listsource属性。
b.keyfieldnames:='a'; //此处指明字段的关键字段
b.listfieldnames:='b'; //此处指明字段的返回值。
b.listcolumns.items[0].caption:='x;
//此处默认是会建立一个字段,但是显示的表头是name,所以此处让它显示为自己想要的中午显示。
cxGrid1DBTableView1c1_sex_code.Properties:=b;
//此处指明是那个字段。
end; //这个是初始化的代码,
tvResult.BeginUpdate;
tvResult.Bands.Clear;
LeftBand := tvResult.Bands.Add;
LeftBand.FixedKind := fkLeft;
LeftBand.Options.Sizing := False; RightBand := tvResult.Bands.Add;
RightBand.Options.Sizing := False; tvResult.ClearItems;
tvResult.DataController.CreateAllItems;
tvResult.EndUpdate; tvResult.BeginUpdate;
for i := 0 to tvResult.ColumnCount - 1 do
begin
GridColumn := tvResult.Columns[i];
Field := GridColumn.DataBinding.Field;
//手动设置PropertiesClass,以便使右键菜单出现'对齐'功能
//Int型字段的PropertiesClass会自动设置为TcxMaskEditProperties
case Field.DataType of
ftString:
begin
GridColumn.DataBinding.ValueTypeClass := TcxStringValueType;
GridColumn.PropertiesClass := TcxTextEditProperties;
end;
ftWideString:
begin
GridColumn.DataBinding.ValueTypeClass := TcxWideStringValueType;
GridColumn.PropertiesClass := TcxTextEditProperties;
end;
ftInteger, ftAutoInc:
begin
GridColumn.DataBinding.ValueTypeClass := TcxIntegerValueType;
GridColumn.PropertiesClass := TcxMaskEditProperties;
end;
ftSmallInt:
begin
GridColumn.DataBinding.ValueTypeClass := TcxSmallIntValueType;
GridColumn.PropertiesClass := TcxMaskEditProperties;
end;
ftLargeInt:
begin
GridColumn.DataBinding.ValueTypeClass := TcxLargeIntValueType;
GridColumn.PropertiesClass := TcxMaskEditProperties;
end;
ftFloat:
begin
GridColumn.DataBinding.ValueTypeClass := TcxFloatValueType;
GridColumn.PropertiesClass := TcxMaskEditProperties;
end;
ftCurrency, ftBCD:
begin
GridColumn.DataBinding.ValueTypeClass := TcxCurrencyValueType;
GridColumn.PropertiesClass := TcxCurrencyEditProperties;
//货币字段统一显示4位小数
TCurrencyField(Field).DisplayFormat := ',0.0000';
//或者使用
//TcxCurrencyEditProperties(GridColumn.Properties).DisplayFormat := '',0.0000';
end;
ftDateTime:
begin
GridColumn.DataBinding.ValueTypeClass := TcxDateTimeValueType;
GridColumn.PropertiesClass := TcxDateEditProperties;
//去除日期时间字段中的时间部分
TDateTimeField(Field).DisplayFormat := 'yyyy-mm-dd';
end;
ftBoolean:
begin
GridColumn.DataBinding.ValueTypeClass := TcxBooleanValueType;
GridColumn.PropertiesClass := TcxCheckBoxProperties;
end;
ftBlob:
begin
GridColumn.DataBinding.ValueTypeClass := TcxObjectValueType;
GridColumn.PropertiesClass := TcxBlobEditProperties;
end;
else
begin
GridColumn.DataBinding.ValueTypeClass := TcxWideStringValueType;
GridColumn.PropertiesClass := TcxTextEditProperties;
end;
end;
//列标题 取最后一个'_'字符后的内容作为列标题
ColumnTitle := GridColumn.Caption;
if PosEx('_', ColumnTitle) > 0 then
begin
sl := FormMain.SplitString(ColumnTitle, '_');
ColumnTitle := sl[sl.Count - 1];
FreeAndNil(sl);
if ColumnTitle = '' then
ColumnTitle := GridColumn.Caption;
end;
GridColumn.Caption := ColumnTitle;
end;
tvResult.EndUpdate; tvResult.BeginUpdate;
for i := 0 to 2 do
begin
tvResult.Columns[i].Position.BandIndex := 0;
tvResult.Columns[i].Position.ColIndex := i;
end; for i := 3 to tvResult.ColumnCount - 1 do
begin
tvResult.Columns[i].Position.BandIndex := 1;
tvResult.Columns[i].Position.ColIndex := i - 3;
end; IniFileName := ExtractFilePath(Application.ExeName) + 'Layout\' + Self.Name + '.ini';
if FileExists(IniFileName) then
Self.tvResult.RestoreFromIniFile(IniFileName)
else
for i := 0 to Self.tvResult.Bands.Count - 1 do
Self.tvResult.Bands[i].ApplyBestFit;
tvResult.EndUpdate;