我有一个字段的值为0或1或-1,在cxGrid显示为Properties为CheckBox类型的列,0为未打勾,1为打勾 已实现,
-1不显示CheckBox,显示为空白并不能修改,不知道怎么实现,有谁知道怎么实现的吗?

解决方案 »

  1.   

    如果只是0和1,cxgrid本身就可以实现,如果想你说的说的那样,可以在drawcell事件中自己画出效果
      

  2.   

    能给出画的代码吗?我试了一下,不行啊
    [code=Delphi(Pascal]
      if AViewInfo.GridRecord.Values[TcxGridDBTableView(Sender).GetColumnByFieldName('MEdit').Index] = -1 then
      begin
        ACanvas.FillRect(AViewInfo.Bounds);
      end;
    [/code]
      

  3.   

    [code=Delphi(Pascal]begin
      cxcolumn:=(sender as TcxGridDBTableView).getcolumnbyfieldname('cht');
      if cxcolumn=nil then exit;
      if sametext(aviewinfo.item.name,cxcolumn.name) then
      begin
        checkvalue:=StrToInt(aviewinfo.gridrecord.values[cxGrid1DBTableView1Column1.index]);
        if(checkvalue=-1) then
        begin
          //你處理的代碼(顯示為空和readonly為false)...      
        end;
      end;
    end;[/code]
      

  4.   

    to kye_jufei 你的代码只是判断当前重画的字段值是-1吧,我的代码已经判断出来了啊,问题是怎么重画为空或readonly為false啊?
      

  5.   

    readonly為false可在cxGrid1DBTableView1Editing事件中处理
      

  6.   

    cxGrid1DBTableView1Editing事件中处理只读我试了一下确实可以
    [code=Delphi(Pascal))]
    procedure TF_RolePopedom.cxGridDBTableView1Editing(
      Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem;
      var AAllow: Boolean);
    var
      cxcolumn:TcxGridDBColumn;
    begin
      cxcolumn:=(sender as TcxGridDBTableView).GetColumnByFieldName('MEdit');
      if cxcolumn=nil then exit;
      if sametext(AItem.name,cxcolumn.name) then
      begin
        if(AItem.DataBinding.Item.EditValue ='-1') then
        begin
          AAllow := False;
        end;
      end;
    end;
    [/code]
    但我还要不显示CheckBox,在重画里面应该怎么写代码呢?
      

  7.   

    你在GetDisplayText事件中處理看看是否可以處理單元格的text
      

  8.   

    试试  procedure TForm1.TableCustomDrawCell(Sender: TcxCustomGridTableView; 
         ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; 
         var ADone: Boolean); 
         var 
           left :integer; 
           Rect:TRect; 
       begin 
         if AViewInfo.Item.DataBinding.FilterFieldName = .. then 
           Exit; 
         if AViewInfo.Item.DataBinding.FilterFieldName = .. then 
         begin 
           AViewInfo.Item.Properties:=nil;
         end; 
      
       end;
      

  9.   

    再提供二個思路:
    1.如果0、1只是為了判斷復選框的選擇和不選擇的狀態的話,你可以把-1的值用sql語句過濾掉再處理它的0或1事件,即選擇和不選擇;
    2.直接將它的editing的readonly鎖定,給出提示
      

  10.   

    to hongqi162 你的方法我试了,不行啊
      

  11.   

    to kye_jufei不能过滤掉-1标志的,思路能转的我会转的,现在就是想实现隐藏CheckBox的功能
      

  12.   

    自己解决了
    procedure TF_RolePopedom.cxGridDBTableView1CustomDrawCell(
      Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
      AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
    begin
      if AViewInfo.GridRecord.Values[TcxGridDBTableView(Sender).GetColumnByFieldName('MEdit').Index] = -1 then
      begin
        if AViewInfo.Item.Index = TcxGridDBTableView(Sender).GetColumnByFieldName('MEdit').Index then
        begin
          ACanvas.FillRect(AViewInfo.Bounds);
          ADone := True;
        end;
      end; 
    end;