类似财务凭证的栏目:摘要、借方、贷方这三栏。要求达到的效果:如果借方不为0,则 摘要栏中的文本居左
                如果贷方不为0,则 摘要栏中的文本居右。   (注:同一行中,借、贷只能一栏有不为0的数据)我在onCustomDrawCell中搞了几种方法,总会报“Invalid class typecast"var cxColumn:TcxGridColumn;
begin
    cxColumn:=(Sender as TcxGridDBTableView).GetColumnBYFieldName('JF'); //就这里报错    ....
end;请各位朋友指点一下,谢谢

解决方案 »

  1.   

    說明:
        Cxgrid控件默認是將數據的數字形式是以居右對齊方式的,文本形式是以居左對齊方式的...你這個功能很簡單:
    可直接在onCustomDrawCell事件中直接控制Cxgrid某列的以下屬性即可:在onCustomDrawCell事件中寫:...
    AlignLeftVisible,//單元格居左   
    AlignRightVisible,//單元格居右
    AlignCenterVisible,//單元格居中   
    ...
      

  2.   

    自己變通鉆研一下...procedure TRes_HrCq_YD_F.cxGrid2DBTableView1CustomDrawCell(
      Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
      AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
    var
      CheckValue:Integer;
      CxColumn:TcxGridDBColumn;
    begin
      inherited;
      CxColumn:=(Sender as TcxGridDBTableView).GetColumnByFieldName('STATUS');
      //加入你的條件
      if CxColumn=nil then Exit;
      if SameText(AViewInfo.Item.Name,CxColumn.Name) then
      begin
        CheckValue:=AViewInfo.GridRecord.Values[cxGrid2DBTableView1Column29.Index];
        if(CheckValue=0) //and  <//加入你的條件:借方不为0(同一行中,借、贷只能一栏有不为>then 
        begin
           //滿足條件的單元格位置(居左)
        end;
       if(CheckValue=1) //and  <//加入你的條件:贷方不为0(同一行中,借、贷只能一栏有不为>>then 
        begin
           //滿足條件的單元格位置(居右)
        end;
      end;
    end;
      

  3.   

    這是必然的,你的重繪事件應該是數據處於瀏覽狀態(即不可編輯狀態),待你提交POST後刷新一下;你再看一下效果類似問題多動手研究一下,思路要清晰,一步一個腳印,循序漸進,才能找到根本問題的辦法最重要的是:要根據實際情況學會融匯貫通,變幻方式及程序代碼祝你成功!