有一列是Numeric(19,2)类型的,用ADO连接SQLServer2000,要在DbGridEh中显示成这样的格式+1,253.25
-15,234.24
+1.454,455.00
表中有个字段叫OperationType,当他的值为1时在数字前显示”+“,为2时显示“-”号,怎样实现这样的功能?

解决方案 »

  1.   

    在onGetText 中写:
    procedure TForm1.ADOQuery1cccGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    begin
      if Sender.DataSet.FieldByName('OperationType').asInteger=1 then
        DisplayText := '+' + FormatCurr(',0.00', Sender.AsCurrency)
      else if Sender.DataSet.FieldByName('OperationType').asInteger=2 then
        DisplayText := '-' + FormatCurr(',0.00', Sender.AsCurrency)
    end;
      

  2.   

    我用的是几个窗体共享的ADOQuery,怎么将上面的代码加进去?
      

  3.   

    1.你在本单元内写一个过程
    procedure cccGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    begin
      if Sender.DataSet.FieldByName('OperationType').asInteger=1 then
        DisplayText := '+' + FormatCurr(',0.00', Sender.AsCurrency)
      else if Sender.DataSet.FieldByName('OperationType').asInteger=2 then
        DisplayText := '-' + FormatCurr(',0.00', Sender.AsCurrency)
    end;2.然后定义:
    如from2.Adoquery.FieldByName('显示的列').onGetText := cccGetText;
    即可:
      

  4.   

    我就是这样做的,提示
    [Error] QueryAccountAllu.pas(129): Incompatible types: 'method pointer and regular procedure'
      

  5.   

    请问你有没有定义下面的过程
    procedure cccGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
      

  6.   

    procedure  SetDisplayFormat(Sender: TField;var Text: String;DisplayText: Boolean);
     begin
       if Sender.DataSet.FieldByName('OperationType').AsInteger = 1 then
          Text:='+'+FormatFloat('###,###0.00',Sender.AsFloat);
       if Sender.DataSet.FieldByName('OperationType').AsInteger = 2 then
          Text:='-'+FormatFloat('###,###0.00',Sender.AsFloat);    
     end;
      

  7.   

    1.
      private
        procedure SetDisplayFormat(Sender: TField);2.
    procedure  form1.SetDisplayFormat(Sender: TField;var Text: String;DisplayText: Boolean);//注意加当前单元名,如form1
     begin
       if Sender.DataSet.FieldByName('OperationType').AsInteger = 1 then
          Text:='+'+FormatFloat('###,###0.00',Sender.AsFloat);
       if Sender.DataSet.FieldByName('OperationType').AsInteger = 2 then
          Text:='-'+FormatFloat('###,###0.00',Sender.AsFloat);    
     end;3.在当前窗口创建或打开时,设置
    from2.Adoquery.FieldByName('显示的列').onGetText := SetDisplayFormat;
      

  8.   

    按照hqhhh(枫叶)提供的方法解决了,是那个form1.的问题