我用cxgrid显示数据集,其中有一个字段N为布尔字段,我想要如果N=true的显示灰色,否则显示默认色,应该怎么写代码,请教懂cxgrid的前辈,谢谢

解决方案 »

  1.   

    procedure TFrm_MainForm.tbDBPartResultStylesGetContentStyle(
      Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
      AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
    begin
       if ARecord.Values[0] = 0 then  //判断N的值
          AStyle := AGreenStyle;
       if ARecord.Values[0] = 1 then
          AStyle := AYellowStyle;
       if ARecord.Values[0] = 2 then
          AStyle := ARedStyle;
    end;
      

  2.   

    加一个cxStyleRepository1控件,设置好几个颜色
    分别命名为cxStyle1,cxStyle1procedure TForm1.cxGrid1DBTableView1StylesGetContentStyle(
      Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
      AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
    begin
       if ARecord.Values[0] ='N' then
         AStyle := cxStyle1
       else
         AStyle := cxStyle2;
    end;
      

  3.   

    关于cxGrid的用法 可参考:
    http://www.delphifans.com/infoView/Article_722.html
      

  4.   

    各位大哥,这样不行啊,因为列是可以拖动的,用上面的各位的写法正常显示没有问题,可是当列一拖动就不行了,Values[0]的值就变了,有没有拖动都不变的解决方法啊。
      

  5.   

    稍改一下:因为你的TcxGridDBTableView继承自TcxCustomGridTableView,所以进行一下向下转型
    procedure TFrmExpense.Contvew_MStylesGetContentStyle(
      Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
      AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
    begin
      if ARecord is TcxGridDataRow then
      begin
        if Sender.DataController.GetDisplayText(ARecord.Index,TcxGridDBTableView(Sender).DataController.GetItemByFieldName('status').Index)='已报' then
          AStyle := DMImpl.cxStyle18;
      end;
    end;
      

  6.   

    cxGrid1DBTableView1.FindItemByName('cxGrid1DBTableView1statusid').Index        //连接列名
    ARecord.Values[cxGrid1DBTableView1.GetColumnByFieldName('N').Index] ='1' then  //连接字段名procedure TForm1.cxGrid1DBTableView1StylesGetContentStyle(
      Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
      AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
    begin
     if ARecord.Values[cxGrid1DBTableView1.GetColumnByFieldName('N').Index] ='1' then  
        AStyle := cxStyle1
      else
        AStyle := cxStyle2;end;
      

  7.   

    楼上的好像都可以,但是一旦使用分组就出错了!判断数值大小的时候,他的index在分组的时候好像发生变化了。