(100分求解简单的问题,在线等待)了解Develop Express 系列中的ExpressGrid 控件包中的 dxDBGrid的列Column的动态增加和

T

tranke

Unregistered / Unconfirmed
GUEST, unregistred user!
(100分求解简单的问题,在线等待)了解Develop Express 系列中的ExpressGrid 控件包中的 dxDBGrid的列Column的动态增加和删除的用法(100分)<br />Develop Express 系列中的ExpressGrid 控件包中的 dxDBGrid的列Column的动态增加和删除的是怎样实现的,我今天玩了一天都找不出解决!
包括,dxDBGrid的界面清空方法!!!记得其它DBGrid可以用DBGrid.column.clear清空
 
点解无人解答呢???
 
你可以在help中找到如何在运行时定制dxDBGrid.
我就不帮你贴了。
选择dxdbGrid,按f1就可找到。
 
To yh:
请把帖子提出来,我就是多次查看了Help,还是找不出问题的解法,所以才来这里求助!
我在代码中这样写:
if dxDBGrid1.CanaddGroupColumns then
var

beign
dxDBGrid1.addGroupColumns(AColumn);
end;

在线等待
 
Axxcolumn := dxDBGrid1.createcolumn(Txxcolumn)
Axxcolumn.....


应该是这样加列吧,D6开起来太慢了,你自己再试吧
 
我以前做过,在开始前需要use几个放ColumnClass的单元
var
AColumn: TColumn;//EqGrid Column的基类,我忘了how to spell it;
i : integer;
begin
for i:= 0 to DataSet.FieldCount - 1 do
begin
case DataSet.Fields.DataType of
ftString:begin
AColumn := FindClass(TStringColumn); //主要是这一句,其他你自己看EQGrid的原码,如果不行,明天我上了半再说
EQGrid1.columns.add(AColumn);
end;
end;
end;
end;

过程就是这样。
 
大哥们,由于我现在在网吧啊,无法调试,您们能否把比较完整的代码贴出来好让我研究后回去试试
 
TO superhippo:
dxDBGrid没有EQGrid1.columns.add(AColumn)这个方法!只有EQGrid1.ADDGroupCoulmns(AColumn)的方法
 
//--------------------------------------------------------------------------
//设置Grid 的显示字段信息
//参数说明
// pdxdbgrid 显示网格
// pAdoDataSet 数据源
// pCheck true_只显示汉字标题字段 false_显示全部字段
Procedure TdmQC.doGridInit(pdxdbgrid :Tdxdbgrid ; pAdoDataSet : TAdoDataSet ; pCheck : boolean);
var ADBTLC : TdxDBTreeListColumn ;
i :integer;
begin
pdxdbgrid.DestroyColumns;

with dmmain.QryPub1 do
begin
close;
sql.clear;
sql.Add(' select * from xjfield where ViewCode = :pViewCode');
parameters.ParamByName('pViewCode').Value := Atag; // Atag 是视图编号,保存在当前单元,此处可以加为函数参数
open;


pdxdbgrid.OptionsView := pdxdbgrid.OptionsView + [edgoRowSelect]; //+[edgoautowidth] ;
for i := 0 to pAdoDataSet.FieldCount -1 do
begin
ADBTLC := pdxdbgrid.CreateColumn(TdxDBTreeListColumn);
ADBTLC.Fieldname := pAdoDataSet.Fields.FieldName ;

first;
if not eof then
if Locate('fieldname',ADBTLC.Fieldname,[]) then //这里另建一个循环,用NEXT代替LOCATE,则可提高部分性能
begin
pAdoDataSet.Fields.DisplayLabel := FieldByName('fielddesc').AsString ;
ADBTLC.Caption := fieldbyname('fielddesc').AsString ;
end;

// ADBTLC.Caption := pAdoDataSet.Fields.DisplayLabel;

if pCheck then
ADBTLC.visible := pAdoDataSet.Fields.FieldName <> pAdoDataSet.Fields.DisplayLabel;
end;
end;
end;
 
TO 吴下阿蒙:
记得dxDBGrid还存在dxBand的属性,那是干什么的,好象Colums都是建立在Band上
 
ADBTLC.bandindex := xx
ADBTLC.GroupIndex := xx

//参考 :TdxTreeListColumn.RowIndex


回答到此结束!

 
我试一试!
 
uses
dxDBGrid, dxDBCtrl, dxBar, dxEdLib, dxGrClms;
// 说明: 我的 dxDBGrid.DataSource.DataSet 是已经知道各个字段的类型的;具体的
// 类型你需要自己去修改;
procedure SetDBGrid(DBGrid : TdxDBGrid); // 根据dxDBGrid连接的 TDataSource 内容来动态建立 Column
var
I : Integer;
Column : TdxDBTreeListColumn;
ColumnClass : TdxDBTreeListColumnClass;
begin
with DBGrid do
begin
BeginUpdate;
BeginGrouping;
try
DefaultFields := False;
if Assigned(DataSource) and Assigned(DataSource.DataSet) then
begin
For I := 0 to DataSource.DataSet.FieldCount - 1 do
begin
if (I = DataSource.DataSet.FieldCount - 4) then
ColumnClass := TdxDBTreeListColumnClass(TdxDBGridCurrencyColumn) // 金额类型
else
ColumnClass := TdxDBTreeListColumnClass(TdxDBGridColumn); // 一般类型

if ColumnClass <> Nil then
begin
Column := CreateColumnEx(ColumnClass, DBGrid);
Column.FieldName := DataSource.DataSet.Fields.FieldName;
Column.HeaderAlignment := taCenter;
if I = 1 then
begin
Column.Width := 80;
Column.Alignment := taCenter;
Column.SummaryFooterField := Column.FieldName;
Column.SummaryFooterType := cstCount;
Column.SummaryFooterFormat := '0';
end
else if I = 2 then
begin
Column.Width := 45;
.
.
.
end;
end;
end;
finally
EndGrouping;
EndUpdate;
end;
end;
end;
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=813332
with dxDBGrid1.CreateColumn(TdxDBGridButtonColumn) as TdxDBGridButtonColumn do
begin
FieldName := 'NAME';
end;
 
To zhihuali:
你的方法很好,可以创建 Column。但是,我想创建dxDBGridPickColumn类型的时候,发现
该Column没有Items.add方法,照你的方法,我是这样写的:
var
Column : TdxDBTreeListColumn;
ColumnClass : TdxDBTreeListColumnClass;
begin
if (字段类型是字符) then
ColumnClass := TdxDBTreeListColumnClass(TdxDBGridPickColumn) //下拉框
else
ColumnClass := TdxDBTreeListColumnClass(TdxDBGridColumn); // 一般类型

if ColumnClass <> Nil then
begin
Column := CreateColumnEx(ColumnClass, DBGrid);
Column.Items.add('我的字符串'); //没有这个方法啊 !!!!!!
{dxDBGrid的Column出现下拉的箭头,但是我根本无法追加数据}
end;
end;
同时,我也用这个方法:
var
ColumnClass : TdxDBTreeListColumnClass;
Column: dxDBGridPickColumn;
beign
ColumnClass := TdxDBTreeListColumnClass(TdxDBTreeListPickColumn) //下拉框
if ColumnClass <> Nil then
begin
Column := CreateColumnEx(ColumnClass, DBGrid);
{提示出错,dxDBTreeListColumn和dxDBGridPickColumn类型不符}
end;
end;

请问应该怎样解决添加下拉框类型的Column,并可以往其添加数据列表
由于问题对我比较急,现在在线等待,分不是问题,我可以将最后100分相送
 
to :tranke

Column.Items.add('我的字符串');
因为你的 Column 是数据敏感类型,是不能这样 ADD 的,你只能设置它的 FIELDNAME 等属性!
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1204751
自已看吧
 
接受zhihuali和goodzuoyu答案
谢谢大家
 
顶部