我想实现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
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
俺一般不直接绘制!
放在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;
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;