运行时如何在StringGrid中删除某一指定列(150分)

  • 主题发起人 主题发起人 NAOE
  • 开始时间 开始时间
N

NAOE

Unregistered / Unconfirmed
GUEST, unregistred user!
程序运行时,另用checkListBox为用户提供了当前的所有列名,由用户选择
需要删除的列名,然后用语句来删除被选择的列(不一定是最后一列),已知
stringGrid的Cols[Index]属性为TStrings类,用以下语句出错(现欲删除
Index为1的那一列),
for i:= 0 to stgname.rowcount-1do
stgName.cols[1].Delete(i);

for i:=0 to StgName.Cols[1].Count-1do
stgName.cols.Delete(1)
报错为 "exception class EInvalidGridOperation with message
'Cannot insert or delete rows from grid'.Process stopped."
任务焦急,望大家速伸援手。先谢了。
 
虽然有DELETE的方法,但好象不能用。
我编程序时,遇到这情况,就把GRID清了,COLCOUNT-1,再重新写。
 
数据量庞大,不太可能重写数据。
请问还有更可靠一些的方法吗?
 
好象STRINGGRID就是出于什么原因,就是不让人用DELETE了
也许有高人知道吧。
 
为什么不这样写:
while stgname.rowcount>0do
stgName.cols[1].Delete(0);
 
或:
for i:= stgname.rowcount-1do
wnto 0do
stgName.cols[1].Delete(i);
 
to o*o:
可以直接删除行或者列吗?
想当初我总是二重循环吧数据往前挪, 再让
rowcount-1
是不是太苯了?
 
To o*o
抱歉,我原句剪贴了你给出的两句语句,但出错信息同前。
但我同样要谢谢你。
 
真的不行,我花过时间在这上,死心吧
 
假设要删除第5列(未做边界检查):
for i := 5 to stringgrid1.colcount - 2do
begin
stringgrid1.cols := stringgrid1.cols[i+1];
end;
stringgrid1.colcount := stringgrid1.colcount - 1;
 
对了, 你的"列"概念是row还是col?
如果是row, 也是一样处理. 将上例的cols改成rows
 
用控件如Aligrid,带源码分析你的原数据存储格式再转为ALIGRID的格式即可你要求的都有,
 
谢谢各位,我用 Another_eYes 的语句成功了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
843
import
I
后退
顶部