动态增加dbgrid的列后,在指定它的datafield!
如果Query里没有定义字段,还可以动态添加字段!再将增加列和它对应!

解决方案 »

  1.   

    我照 lastlove() 说的那样尝试过,可是在dbgrid里面就是无法改变这个新增字段的值,而修改其它字段就没问题!折磨我一天了,谁有解决方案哪?
      

  2.   

    你把Query的语句改一下,象这样:Select * from table1改为Select *,space(20) as mycol from table1,在DBGrid中连上mycol的字段就可以随便改。
      

  3.   

    当然不能改,你改的值没有地方可以保存,你说能能不能改!
    也就是说你一POST就铁定会报错!
      

  4.   

    对了,你的sql语句里边至少要有你想修改的字段名!
    如果你连这都没有,添加一列有什么意义?
      

  5.   

    TO lastlove() :
      我的新增字段的属性就是按照你最开始说的那样摄制的。但是在Query里动态增加字段之后,在Query Open的时候数据库提示该列没有找到!
    TO xjb2001(痴墨):
      那么你说我该怎么办?给个建议好吗?谢谢。
      

  6.   

    var fld: TStringField;
    begin
        fld:= TStringField.Create(Self);
        fld.FieldKind:=fkdata;
        fld.FieldName := 'test';
        fld.Name := 'test'
        fld.DataSet := Qry;
        with  dbgrd.Columns.Add    do 
        begin
          FieldName:='test'; 
          title.caption:='test'
        end;
      end;
      

  7.   

    你用的是什么数据库,如果你用的是SQLServer数据库,我给你的代码可行呀!
      

  8.   

    TO forgot2000(忘记2000年) :
      我使用的确实是SQL Server 2000,但是我按照你的方法作了之后,运行时提示:Invalid use of keyword.Token:,0。
      我的query是cachedupdates模式,即CachedUpdates:=true 并且RequestLive:=true。所以才出现上面的情况。
      

  9.   

    我的思路:
    在程序开始或者你需要的地方动态创建创建一个本地表,该表包含所有你需要的列,然后把你检索到的数据逐行填写道该表中(也就显示出来了),操作完毕后根据需要再保存到自己的数据表中,Free动态创建的本地表。
    语句就不写了,太长了。
    该方法速度可能会比较慢,多了一道工序,如果你的机子比较快,数据量不大,该方法很容易实现。
      

  10.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, Grids, DBGrids, DBTables;type
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        Table1: TTable;
        DBGrid1: TDBGrid;
        Table1a: TIntegerField;
        Table1b: TIntegerField;
        Table1c: TIntegerField;
        Table1f: TIntegerField;
        procedure Table1CalcFields(DataSet: TDataSet);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Table1CalcFields(DataSet: TDataSet);
    begin
      table1f.value:=table1a.value+table1b.value+table1c.Value;    {计算字段f的值}
    end;end. 简单吧!!!
    [email protected]
      

  11.   

    select '' as newcolumnname,a,b,c,d from table
      

  12.   

    为什么你非要用RequestLive:=true呢?那样对运行时的环境有很大现在,你既然用CacheUpdate,就加一个UpdateQuery组件吧,自己选择要更新的字段,这样,只有提交时才通知后台数据库,你前台加多少个虚拟字段都行呀!