要循环。
var sNewColumnName:string;//新的字段的名称
....
for i:=0 to dbgrid1.columns.count-1 do 
begin
  if uppercase(trim(dbgrid1.columns[i].fieldname))=uppercase(trim(snewcolumnname)) then
  begin 
    dbgrid1.columns[i].picklist:=''
    dbgrid1.columns[i].alignment:=tacenter;
    dbgrid1.columns[i].title.alignment:=tacenter;
  end;
end;如果全部都要,那么把if 去掉就可以了。

解决方案 »

  1.   

    picklist是TStrings型
    用代码添加:
    如果下拉菜单的内容已经确定,如下:
       dbgrid1.columns[i].picklist.clear;
       dbgrid1.columns[i].picklist.add('选项1');
       dbgrid1.columns[i].picklist.add('选项2');
       dbgrid1.columns[i].picklist.add('选项3');
    至于其他的,正如楼上的兄台所言。
      

  2.   

    全部的代码是不是在读入表的时候的按纽事件中加(我是原来在此事件有
    table1.close;
    table1.dataname:=xxx.db;
    table1.open;的代码):
    var sNewColumnName:string;//新的字段的名称(可我不能确定新字段就是叫什么的啊?比如新字段叫y2001,那sNewColumnName是不是就改成y2001了?)
    ....
    for i:=0 to dbgrid1.columns.count-1 do 
    begin
      if uppercase(trim(dbgrid1.columns[i].fieldname))=uppercase(trim(snewcolumnname)) then//这一句是什么意思?
      begin 
      dbgrid1.columns[i].picklist.clear;
      dbgrid1.columns[i].picklist.add('选项1');
      dbgrid1.columns[i].picklist.add('选项2');
      dbgrid1.columns[i].picklist.add('选项3');
    bgrid1.columns[i].alignment:=tacenter;
    dbgrid1.columns[i].title.alignment:=tacenter;
      end;
    end;
      

  3.   

    1。应该在读入表的时候加。2。if uppercase(trim(dbgrid1.columns[i].fieldname))=uppercase(trim(snewcolumnname)) then//这一句是什么意思?这句是当该列的所对应的字段名是snewcolumnname时,就添加picklist。我开始以为字段是由你的程序加入去的,比如按一个按钮就加入一个字段,所以一定会知道该字段的名称。
    如果不知道特定的字段名,那就只能所有列都加上picklist了。
      

  4.   

    其实有些字段名是固定的,是知道的。而新增的是用户新增的,自己也不知道,不过这些新增的picklist都是一样的,固定的。可不可以先把已知的字段名加上picklist,而其它的字段名就加上同样的picklist?还有几个是不用加的,能不能声明不用加?可以用if uppercase(trim(dbgrid1.columns[i].fieldname))=uppercase(trim(snewcolumnname)) then//snewcolumnname是已知的不用加picklist的字段名。
      begin 
        dbgrid1.columns[i].picklist:=''吗?
        
      

  5.   

    是不是通过多次  
    if 已知不用加picklist的 then begin picklist='' end;
    if 已知要加picklist的   then begin dbgrid1.columns[i].picklist.add('选项1') end;
    if 不知的但加同样picklist的  then begin  同上。end;//这一句的if 又如何写?
    这样来实现的?
      
      

  6.   

    我想可以分成三大块:第一类是固定的要有picklist的;第二类是固定的不用picklist的;第三类是字段名不固定会有增删的要有picklist、但picklist内容都一样的。这样会简单一点了吧?而且定义完第一第二类后,剩下的就全部加同样的picklist就行了啊。
      

  7.   

    我自己快解决了,问一下,if uppercase(trim(dbgrid1.columns[i].fieldname))=uppercase(trim(snewcolumnname)) then中若是有多个snewcolumnname,想表示snewcolumnname1或snewcolumnname2或snewcolumnname3是如何表示的?我用(trim(snewcolumnname1);(snewcolumnname2);(snewcolumnname3))通不过。 
      

  8.   

    请帮我回答一下最后一个问题。如下:
    var list1:Tstringlist;
        i,j:integer;
    begin
      list1:=Tstringlist.create;
      list1.add('字段名1');
      list1.add('字段名2');
      list1.add('字段名3');
      for j:=0 to list1.count-1 do
      begin
        for i:=0 to dbgrid1.columns.count-1 do
        begin
          if uppercase(trim(dbgrid1.columns[i].fieldname))<>
          uppercase(trim(list1.strings[j])) then
          begin
    dbgrid1.columns[i].picklist.clear;
    dbgrid1.columns[i].picklist.add('选项1');
    dbgrid1.columns[i].picklist.add('选项2');
    dbgrid1.columns[i].picklist.add('选项3');    
    end;
        end;
      end;
    end;
    我的意思是固定的字段名外的所有字段名(包括新增的)都加上picklist,也就是说StringList里的都是原来就有的固定不变的字段名。所以我用了<>,结果表里所有记录全都加上了picklist。
      

  9.   

    我不是高手,不过也来帮帮忙。
    如果你是用tstringlist来记录固定的字段名的话,用indexof('xxx')来判断某字符串是否在stringlist中。indexof分不分大小写你就试一下吧。    for i:=0 to dbgrid1.columns.count-1 do
        begin
          if list1.indexof(trim(dbgrid1.columns[i].fieldname))=-1 then
          begin
            dbgrid1.columns[i].picklist.clear;
            dbgrid1.columns[i].picklist.add('选项1');
            dbgrid1.columns[i].picklist.add('选项2');
            dbgrid1.columns[i].picklist.add('选项3');    
          end;
        end;