关于STRINGGRID的行互换问题 (50分)

K

kk2000

Unregistered / Unconfirmed
GUEST, unregistred user!
比如在STRINGGRID放着下面的数据:

左边: 右边:
stringgrid1.cells[0,0]:='序号'; stringgrid1.cells[1,0]:='编号'
stringgrid1.cells[0.1]:='1'; stringgrid1.cells[1.1]:='1';
stringgrid1.cells[0,2]:='2'; stringgrid1.cells[1,2]:='2';
stringgrid1.cells[0,3]:='3'; stringgrid1.cells[1,3]:='3';
stringgrid1.cells[0,3]:='4'; stringgrid1.cells[1,3]:='4';
stringgrid1.cells[0,5]:='5'; stringgrid1.cells[1,5]:='5';
当我把左边的序号‘4’拖 到序号‘2’那里之后。不进行处理的话他的序号是这样排列的
”1,4,2,3,5“ 但我想把序号从新排列为:“1,2,3,4,5”,同时右边的编号也排列
为:“1,2,3,4,5” 请问该如何做呢?我想了好久都不能解决.请各位高人指点!各位因
为stringgrid1.cells[2,I]里面还有数据,而这列的数据是不该变的,所以我才提出此问题.
不过:jsxjd的方法正是我所需要的,如果各位还有什么好的方法请贴出来啦!
 
我不太明白你的意思,可能没表达清楚意图。
如果那样可以阻止移动。
但是很好实现,处理一下StringGrid的
OnRowMoved事件。

以下是成功的代码示例:
/////////////////////////////////////////
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to 5 do
begin
stringGrid1.cells[0,i]:=inttostr(i*2);
stringGrid1.cells[1,i]:=inttostr(i*2);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage(stringGrid1.cells[0,3]);
end;

////////////////以下是主要过程。
procedure TForm1.StringGrid1RowMoved(Sender: TObject; FromIndex,
ToIndex: Integer);
var
s1,s2:string;
i:integer;
begin
s1:=stringGrid1.cells[0,ToIndex];
s2:=stringGrid1.cells[1,ToIndex];

if FromIndex>ToIndex then
for i:=ToIndex to FromIndex-1 do
begin
stringGrid1.cells[0,i]:=stringGrid1.cells[0,i+1];
stringGrid1.cells[1,i]:=stringGrid1.cells[1,i+1];
end
else
for i:=ToIndex downto FromIndex+1 do
begin
stringGrid1.cells[0,i]:=stringGrid1.cells[0,i-1];
stringGrid1.cells[1,i]:=stringGrid1.cells[1,i-1];
end;

stringGrid1.cells[0,FromIndex]:=s1;
stringGrid1.cells[1,FromIndex]:=s2;
end;
 
你的想法是拖动后什么也不变,
那 为何又要拖动呢??
 
有好的方法不如大家分享啦!!
 
是不是表达错了?
 
顶部