如題.
例如: 行中有從表中取出的單價, 數量, 如何令到程序運行時自動生成一欄, 其內容為單價*數量? 
讓AdoQuery運行時動態增加計算欄位也行, 前題是不需要在設計時把所有欄位都加到程序中去.

解决方案 »

  1.   


    你在SQL中写就可以了哦。
    adoquery.Close();
    adoQuery.Sql.Text := 'select *,單價*數量 as 总金额 from table1';
    adoQuery.Open();
      

  2.   

    运行时自动生成,要生成所有要显示的字段,并不是只增加1列
    1.设计时全部加进来
    2.运行时动态全部添加(字段多的话,类型也会很多,就会觉得很麻烦)
    3.全部不指定通过SQL语句有多少列就显示多少列2)动态添加就像下面这样,主要就这几个属性要设置
    var F:TField;
    bein
    F:=TField.Create(self);
    F.DataType:=
    F.FieldKind:=
    F.FieldName:=
    F.Size:=
    ADOQuery.Fields.Add(F);
      

  3.   

    DBGridEh也是一样的,做成循环添加with DBGridEh1 do
    begin
    Columns.BeginUpdate;
    Columns.Clear;
    for i:=0 to 10 do
    begin
    Columns.Add;
    Columns[i].FieldName:='F'+IntToStr(i);
    Columns[i].Title.Caption:=Columns[i].FieldName;
    Columns[i].Width:=80;
    end;
    Columns.EndUpdate;
    end;
      

  4.   

    有多种办法的。
    1.用2楼的办法解决,在显示记时就直接记算了。但是这样显示的记录不能做修改。
    2.在数据集中增加一个计算用的栏位,然后用数据集的OnCalcFields事件来写计算代码,这种呢,就可以修改单价和数量后自动计算金额。但是计算出来的金额不会存到数据库中。
    3.如果又要自动计算,又要储存计算后的金额到数据库的话,在数据表中就要有个栏位,然后在输出控件DBGridEh1中写相应的数量和单价的值输入后要执行计算的代码。第三种实现的方法有多种。原理就是这样。
      

  5.   

    kaikai_kk, 我想寻找比这个更简洁的方案.
    我的系统中大量用到DbGridEh, 而且设计时全部是空的, AdoQuery语句也是空的, 全部在运行时根据用户权限临时从库里提取装配adoQuery的SQL.Text. 现在唯一的麻烦就是计算字段没有好的解决方案. 除你提到的这些属性外, 我还要考虑dbGridEh中的某些栏位的下拉选择, 关联选择, 只读, 显示宽度, 等等.
      

  6.   

    首先获取字段名、字段类型、字段长度、显示长度、显示标题、是否关联、是否主键、关联ID等,这些可以用xml的形式保存下来或者写成控件,然后界面上去解析对应的字段
      

  7.   

    jonathanscor: 计算字段你建议用哪种方案呢? 如: 金额=单价*数量 其中的金额如何处理?