就是比方说字段‘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中的。
在线等待!
注:dbGrid1.columns[dbgrid1.DataSource.DataSet.fieldbyname('sex').index].PickList.Clear; 中的index返回的是‘sex’在表中的位置,而不是dbGrid中的。
showmessage(inttostr(adotable1.FieldByName('男').Index));
如果是自己添加的一列的话,你可以在dbgrid的oncellclick事件中:
if dbgrid1.SelectedField.FieldName='' then
dbgrid1.columns[dbgrid1.SelectedField.Index].picklist.add('男');
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中所在的列序号。我是菜鸟,请高手说细点,好吗?
在线等待!!!
谢谢!!!
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
在dbgrid的oncellclick事件中写代码:
if dbgrid1.SelectedField.FieldName='sex' then
dbgrid1.columns[dbgrid1.SelectedField.Index].picklist.add('男');
和你要的效果是一样的如果你想保持原来的代码的话,也是可以的,你把你的代码修改一下:
dbgrid1.Columns[adotable1.FindField('sex').Index].PickList.Add('男'),
但是你这就要保证在你的数据库中有“sex”这个字段了,而我说的第一种方法可以没有这个字段。
dbgrid1.columns[dbgrid1.SelectedField.Index].picklist.add('男');
dbgrid1.columns[dbgrid1.SelectedField.Index].picklist.add('男');
dbgrid1.Columns[adotable1.FindField('sex').Index].PickList.Add('男'),
以上的Index都是‘sex’在table1中的位置,并不是dbGrid1中的列位置,因为这两个位置不是一回事。能有别的方法吗?谢谢!!!
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开始