为了动态的向DBGRID1.COLUMNS[dbgrid1.selectcolumnsindex].PICKLIST添加下拉项,在DBGRID1.COLENTER事件里写下下面的语句:procedure form1.dbgrid1colenter(sender:tobject);
begin
picklistadddata(dbgrid1.selectcolumnsindex); //这是一个自定义过程,过程内容如下:
end;
procedure form1.picklistadddata(intcase:integer);
var
i:integer;begin
if intcase=1 then
begin
for i=0 to dbgrid1.columns[1].picklist.count-1 do
dbgrid1.columns[1].picklist.delete(i);
dbgrid1.columns[1].picklist.add('你好') ;
end;
if intcase=2 then
begin
for i=0 to dbgrid1.columns[1].picklist.count-1 do
dbgrid1.columns[1].picklist.delete(i);
dbgrid1.columns[1].picklist.add('你好吗') ;
end;
end;上述语句在运行过程中,在两列之间多来回几次就出现LIST OUT OF BOUNDS 这样的错误提示。
不知道原因在哪儿?请高手帮帮忙!
if intcase=2 then
begin
for i=0 to dbgrid1.columns[1].picklist.count-1 do
dbgrid1.columns[1].picklist.delete(i);
dbgrid1.columns[1].picklist.add('你好吗') ;
end;
应该是colunmn[2]这个是我这儿写错的。
for i := DBGrid1.Columns[1].PickList.Count - 1 downto 0 do
//干你的事
dbgrid1.columns[1].picklist.delete(i(*注意这个I的值,看是否超出picklist的范围*));
dbgrid1.columns[2].picklist.delete(i(*注意这个I的值,看是否超出picklist的范围*));
for i := DBGrid1.Columns[1].PickList.Count - 1 downto 0 do
//干你的事上面的语句和我的语句应该是没有什么区别呀:
or i=0 to dbgrid1.columns[1].picklist.count-1 do
dbgrid1.columns[1].picklist.delete(i(*注意这个I的值,看是否超出picklist的范围*));
dbgrid1.columns[2].picklist.delete(i(*注意这个I的值,看是否超出picklist的范围*));
I的取值范围就在0到dbgrid1.columns[1].picklist.count-1,怎么会超出范围呢请上面两位大侠说详细一点好吗?我的语句在执行过程中,开始还正常,一会儿就会提示list index out of bounds(1)这样的错误的。