有一个8列200行的表格放在StringGrid中,其中插有若干空行,我想删掉其中的空行,把数据都集中起来
我的程序是:procedure TForm_yc.clearnil;
var  i,j,k:integer;
  begin
   for i:= 1 to 200 do
      if sg.Cells[0,i]='' then  
        for k:=0 to 7 do  begin
         sg.Cells[k,i]:=sg.Cells[k,i+1];
         end;
    end;
 
  结果不正确,出现数据重叠现象,请帮帮忙!

解决方案 »

  1.   

    这样写吧:
    procedure TForm_yc.clearnil;
    var  i,j,k: integer;
    begin
      for i:= 1 to sg.RowCount- 1 do
      begin
        for j:= 1 to sg.RowCount- 1 do
        begin
          if sg.Cells[1,j]= '' then
          begin
            for k:= j to sg.RowCount- 1 do
            begin
              sg.Rows[k]:=sg.Rows[k+ 1];
            end;
            sg.RowCount:= sg.RowCount-1;
            break;
          end
        end
      end
    end;
      

  2.   

    算法:
       碰到空行(第N行)把下一行(第(N+1)行)的数据上移。把该行(N+1)设为空行,如此循环,可以得到有多少行为‘非空行’,假使为M行,把前M行显示出来就可以了,类似于排序中的冒泡法
      

  3.   

    你的错误主要在没有把上移的行清空。sg.Cells[k,i]:=sg.Cells[k,i+1]后该有sg.Cells[k,i+1]:=''。
      

  4.   

    我觉得  zhourongbiao(Edward) 说的办法有点问题,譬如碰到连续空行的话就没什么效果,
    楼主,干吗不在插入的时候判断是否为空,为空值就直接不插入就行了吗,^_^