我的程序用到一个dbgrid,但是它的DataSource对应的DataSet是在程序是动态指定的不同的存储过程,而且我的DataSource遇上某个字段是金额时,我要显示千分号,该怎么做呢?
我只想用一个AdoStoredProc控件来在程序中动态指定存储过程
我想应该是指定字段的DisPlayFormat,可一直不知道displayformat该用在哪.

解决方案 »

  1.   

    query里的字段上格式化不行么?
      

  2.   

    用的是AdoStoredproc,但它到底要调用哪个存储过程,是在程序中根据条件决定的呀,不能在设计阶段格式化哪个字段的
      

  3.   

    显示千分号,可以在该字段的OnGetText中加入
      

  4.   

    对每个可能牵涉到的SP的那个特定的字段,设置DisplayMask
      

  5.   

    to Acquarius(二当家):
      在设计阶段确实是可以用DisplayFormat设置,程序运行时也能显示正确,但在设计阶段无法确定DBGrid的这个Columns要显示的是哪个字段,在程序运行时才能确定,那怎么设呢?
    我在程序中试了Fields[4].DisplayFormat:='#,##0.00';结果出错,连编译都通不过.还有,未找到你所说的DisplayMask属性,它在哪儿用呢?
      

  6.   

    to yashenJXF(鸦神) :
       那用法能说详细点吗?我试了一下,没有成功.先行谢过!!!!
      

  7.   

    呵呵,我说的就是DisplayFormat,记错了的说。我知道你的ADOStoredProc在变,但是对于一个特定的ADOSP来说,它的SQL语句是不会变的吧?那么在每个ADOSP上双击后,在弹出的对话框中右击并选择“Add all fields"不就可以生成永久字段了?对你想处理的永久字段设置它的DisplayFormat就可以了。
      

  8.   

    to Acquarius(二当家):
      可能是我没说得很清楚,我的意思是说我只用到一个AdoStoredProc组件,这个组件将会对应哪个存储过程是由用户的选择决定的,比如一个查询窗口中可能有五种查询方式,用户决定要进行何种查询时,这个AdoStoredProc才会去与某个存储过程对应起来,我并没有在设计阶段放上五个AdoStoredProc组件,如果我放了五个这样的组件的话,那确实可以与那五个存储过程在设计的时候就对应起来,那就可以象你上贴所说的那样设好DisplayFormat了.能再给些建议吗?
      

  9.   

    procedure TForm1.Table1AfterOpen(DataSet: TDataSet);
    var
      I: Integer;
    begin
      for I := 0 to DataSet.Fields.Count - 1 do
        case DataSet.Fields[I].DataType of
          ftSmallint, ftInteger, ftWord, ftFloat, ftCurrency, ftBCD:
            TNumericField(DataSet.Fields[I]).DisplayFormat := ',.00';
        end;
    end;
      

  10.   

    那就只能尝试一下zswang的方法。不过我还是建议用五个ADOSP的说。可能是笨了一点,但是至少麻烦少了很多啊。
      

  11.   

    多谢zswang(伴水清清)(专家门诊清洁工)的解答!
    多谢Acquarius(二当家)的热心!
    立马结贴!
      

  12.   

    多谢zswang(伴水清清)(专家门诊清洁工)的解答!  
    多谢Acquarius(二当家)的热心!  
    立马结贴!