我想实现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

解决方案 »

  1.   

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

  2.   

    ......
    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;