CXGRID的转换显示值的问题

szonghao 2012-07-09 07:14:17
我想实现cxGrid中,某列的值都转换下,为什么整个列都转换成一样的值呢?
procedure TMainFrm.cxGrid1DBTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
if (AViewInfo.Item.Index=1) then
begin
ACanvas.FillRect(AViewInfo.Bounds);
ACanvas.Font.Color:=clBlack;
ACanvas.Brush.Style:=bsClear;
ACanvas.DrawTexT(strtohexstr(Query3.fieldbyname('sfzh').AsString),AViewInfo.Bounds,cxAlignleft);
ADone:=true;
end;
end;

错误效果效果如下
4B0BC854
4B0BC854
4B0BC854
4B0BC854
4B0BC854
4B0BC854
4B0BC854
4B0BC854
4B0BC854
4B0BC854

...全文
152 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
广州佬 2012-07-10
  • 打赏
  • 举报
回复
......
ACanvas.DrawTexT(strtohexstr(Query3.fieldbyname('sfzh').AsString),AViewInfo.Bounds,cxAlignleft);
......

你输出的内容是Query3的当前记录,在cxGrid1DBTableView1的CustomDrawCell事件里,Query3的记录指针是不会随着行的改变而改变!这样子的语句,就当然地是一个相同的内容了。

试试:
procedure TMainFrm.cxGrid1DBTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
if (AViewInfo.Item.Index<>1) then exit;
with ACanvas do begin
FillRect(AViewInfo.Bounds);
Brush.Style:=bsClear;
DrawTexT(StrToHexstr(AViewInfo.GridRecord.Values[0]),AViewInfo.Bounds,cxAlignleft,true);
end;
ADone:=true;
end;
酣酣 2012-07-10
  • 打赏
  • 举报
回复
呃!
俺一般不直接绘制!
放在OnGetDisplayText事件下
另外不直接取DataSet中的数据,你上面的那个Query中的当前记录不一定是要绘制的那一行!
呵呵!

procedure TForm1.cxGrid1DBTableView1Column1GetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
begin
if VarToStr(ARecord.Values[列索引]) <> '' then
AText := VarToStr(ARecord.Values[列索引])
else
AText := '呵呵呵';
end;

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧