就是比方说字段‘sex’在第一列, dbGrid1.columns[0].picklist.add('男') 只是对第一列操作,而如果‘sex’以后调整到其他列时,我岂不是又要dbGrid1.columns[x].picklist.add('男') ,所以在DBGrid中,已知有字段名,怎样返回所在的列值 columns(?)
在线等待!
注:dbGrid1.columns[dbgrid1.DataSource.DataSet.fieldbyname('sex').index].PickList.Clear; 中的index返回的是‘sex’在表中的位置,而不是dbGrid中的。

解决方案 »

  1.   

    1 如果你是在数据库中读取的数据的话,我觉得你应该
    showmessage(inttostr(adotable1.FieldByName('男').Index));
    如果是自己添加的一列的话,你可以在dbgrid的oncellclick事件中:
    if dbgrid1.SelectedField.FieldName='' then
    dbgrid1.columns[dbgrid1.SelectedField.Index].picklist.add('男');
      

  2.   

    用dbgrid连接的table或者query不就可以了吗,:table1.fieldbyname('sex').asstring......在dbgrid怎样调整都可以
      

  3.   

    我是在FormCreate事件中添加的:
    dbGrid1.columns[0].picklist.clear;
    dbGrid1.columns[0].picklist.add('男');
    dbGrid1.columns[0].picklist.add('女');我的问题是有没有通过字段名(如'sex')来做,而不是colums[0],譬如:
    dbGrid1.columns[table1.fieldbyname('sex')....].picklist.add('男')
    其中[...]返回的值是字段‘sex’在dbGrid1中所在的列序号。我是菜鸟,请高手说细点,好吗?
    在线等待!!!
    谢谢!!!
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
    begin
      FOR i:=0 TO DBGRID1.Columns.Count-1 do
      begin
        if dbgrid1.columns[i].field.name='table1sex' then
        begin
          dbGrid1.columns[i].picklist.clear;
          dbGrid1.columns[i].picklist.add('男');
          dbGrid1.columns[i].picklist.add('女');      
        end;
      end;
    end;
    你只要循环找一下就可以了
    注意:dbgrid1.columns[i].field.name为你连接此dbgrid的table的名字加字段,
    我连接的是table1
      

  5.   

    其实,你要看你实现的目的:picklist本是只有在用户点击dbgrid的时候才能把她所添加的内容下拉出来,所以你可以采用:
    在dbgrid的oncellclick事件中写代码:
    if dbgrid1.SelectedField.FieldName='sex' then
    dbgrid1.columns[dbgrid1.SelectedField.Index].picklist.add('男');
    和你要的效果是一样的如果你想保持原来的代码的话,也是可以的,你把你的代码修改一下:
    dbgrid1.Columns[adotable1.FindField('sex').Index].PickList.Add('男'),
    但是你这就要保证在你的数据库中有“sex”这个字段了,而我说的第一种方法可以没有这个字段。
      

  6.   

    To  IORILI: 
    dbgrid1.columns[dbgrid1.SelectedField.Index].picklist.add('男');
      

  7.   

    To  IORILI: 
    dbgrid1.columns[dbgrid1.SelectedField.Index].picklist.add('男');
    dbgrid1.Columns[adotable1.FindField('sex').Index].PickList.Add('男'),
    以上的Index都是‘sex’在table1中的位置,并不是dbGrid1中的列位置,因为这两个位置不是一回事。能有别的方法吗?谢谢!!!
      

  8.   

    当然不一样了,比如说,你在数据库中有“sex”这个字段,但你在dbgrid中没有“sex”,而取代之用“性别”,但是这样的话
    if dbgrid1.SelectedField.FieldName='性别' then
    但不能if dbgrid1.SelectedField.FieldName='sex' then 了。至于dbgrid1.columns[dbgrid1.SelectedField.Index].picklist.add('男');
    你说与table有关,那我可以告诉你,这条语句与table一点关系都没有,他只是你在选择了某个字段或某条记录时发生的一个事件而以你所说的以上的Index都是‘sex’在table1中的位置,并不是dbGrid1中的列位置
    其实是你没有理解dbgrid中的列的列值,是从0开始的,并不像我们所看到的从1开始。就像我们数数一样,0.1.2.3.4.......而不是从1开始