请教高手,有关于 dxdbgrid 动态增加一列的问题。 (100分)

S

sunys

Unregistered / Unconfirmed
GUEST, unregistred user!
var DbcImageItem: TDxdbgridimagecolumn;
begin
DbcImageItem:=TDxdbgridimagecolumn(dbgdmain.CreateColumn(TDxdbgridimagecolumn));
DbcImageItem.Images:=ImageList1;
DbcImageItem.FieldName:='p_bmp';
DbcImageItem.Values.Add('Y');
DbcImageItem.Values.Add('N');
end;
我想动态增加TDxdbgridimagecolumn这一列,ImageList1里有2副图片,
想在DXDBGRID下拉里出现图片,但是上面语句不行,下拉里不能出现图片,
怎么样才能动态增加TDxdbgridimagecolumn而出现图片呢?
 
var DbcImageItem: TDxdbgridimagecolumn;
begin
DbcImageItem:=TDxdbgridimagecolumn(dbgdmain.CreateColumn(TDxdbgridimagecolumn));
DbcImageItem.Images:=ImageList1;
DbcImageItem.FieldName:='p_bmp';
DbcImageItem.Values.Add('Y');
DbcImageItem.Values.Add('N');
end;
 
zm30:那个题目是我手误,我就是 这样写的
DbcImageItem:=TDxdbgridimagecolumn(dbgdmain.CreateColumn(TDxdbgridimagecolumn));
但是不行
 
我试过能下拉出图标,但没试过存盘,没看见有Y和N
 
我的p_bmp这个字段是这样来的,
select substring(bmpstr,2,1) p_bmp from table
我发现如果字段P_BMP是这样来的,那么动态生成这个列的时候是出不来图标的,
但是如果这个p_bmp字段本身就在数据表里的,动态生成时图标就可以出来。
 
这就涉及到另一个问题,计算字段的更改问题。
如果是BDE可以设成CacheUpdate就可以编辑,但Ado不行,如果这个字段可以更改,图标才能出来,
我想dxDbgrid做了这个限制
 
谢谢zm30,我是用clientdataset的,是用ado连接的,不能把它改为BDE的,
这个问题该如何解决呢?
 
不过我想如果用TDxdbgridimagecolumn不行,可以用TdxDBGridColumn显示出值,
然后去画,但是也画不出来,不知道什么缘故。下面是我的程序
Procedure TfrmParentTaskBkProgress.dbgdmainCustomDrawCell(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
var AText: String; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ADone: Boolean);
begin
aCanvas.FillRect(arect);
if atext='Y' then
begin
imagelist1.Draw(acanvas,ARect.Left+4,arect.top+2,0);
end
ELSE
BEGIN
imagelist1.Draw(acanvas,ARect.Left+4,arect.top+2,1);
END;

end;
 
做过三层的程序没,在Clientdataset和AdoQuery中间加一个DatasetProvider,
你那个ClientDataset就可以编辑了
 
我现在做的就是三层,客户端全部用CLIENTDATASET,应用服务器是几个AdoQuery中间加DatasetProvider,
其实我不想编辑,我只是想显示图片,根据这个计算字段的值。
 
把你的AdoQuery里的这个计算字段的ReadOnly属性设成false,再看一下ClientDataset里的
字段的Readonly属性,一定要让它为false,这样图标才能出来,更新时你可以把这个字段
从更新列表里去掉就行了
 
我的客户端的数据库也就是clientdataset是通过应用服务器传回来的DATA的。

所以我只把clientdataset的字段的 readonly:=true和clientdataset的readonly:=true都设置了,
不过还是不行。如果此问题能解决,再为你加分。
 
如果Readonly为true,根本就无法出现下拉列表,如果为false就可以,你多试试
 
我现在换了种方法了,动态生成类型为TdxDBGridColumn的列,然后去画图,这样就可以了,
不过还是很谢谢你,给分了。
procedure TfrmParentTaskBkProgress.dbgdmainCustomDraw(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxDBTreeListColumn; const AText: String; AFont: TFont;
var AColor: TColor; ASelected, AFocused: Boolean; var ADone: Boolean);
var stext:string;
begin
stext:=trim(atext);
if (stext='Y') then
begin
aCanvas.FillRect(arect);
aCanvas.Brush.Color:=dbgdmain.Color;
bigimagelist.Draw(acanvas,ARect.Left+3,arect.top+1,0);
adone:=true;
end
else if (stext='N') then
begin
aCanvas.FillRect(arect);
aCanvas.Brush.Color:=dbgdmain.Color;
bigimagelist.Draw(acanvas,ARect.Left+3,arect.top+1,1);
adone:=true;
end;
 
接受答案了.
 
顶部