如何在 DBGrid 随意移动表中的记录?(100分)

  • 主题发起人 主题发起人 mslf
  • 开始时间 开始时间
M

mslf

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在 DBGrid 随意移动表中的记录,就象在收藏夹中移动所收藏的内容一样?
 
可能用到拖放吧。但我做不出来。帮你顶
 
SQL数据库中,记录的位置是不重要的。
所以,有这个必要吗???
 
可以考虑用TListView来实现,也许会简单一点。
 
这段时间做的一系统中刚好用到。要实现这个功能首先数据表中有一个记录数据记录序号的字段(不能是计算字段),将按这个字段进行排序。然后:
OnMouseDown中编写:
DBGrid.BeginDrop(False,8);

OnDropOver中编写:
Accept := True;

OnDropOver中编写
var
Coord : TGridCoord;
begin
Coord := DBGrid.GetCoord(X,Y);
//Coord.Y就是第几条记录,这时就可以进行处理了。
....
end;

由于我是在网页上直接敲的,很多细节都不能写入。不过主要的代码都在这里了。
 
hotyei, 你就给我一个完整的程序吧。嫌分少的话还可再加分。
 
var
LastNo, ThisNo: integer;
//lastno ÉÏÒ»Á÷³ÌºÅ thisno ±¾Á÷³ÌºÅ
BookMark1: Tbookmark;
//ÊéÇ©
begin
//ÉÏÒÆÊý¾Ý
with FlowQ do
begin
ThisNo := FieldByName('F_Step_NO').Asinteger;
Prior;
BookMark1 := GetBookMark;
if not Bof then //µ±Î´µ½Ê×Ìõ¼Ç¼
begin
Edit;
LastNo := FieldByName('F_Step_NO').Asinteger;
FieldByName('F_Step_NO').Asinteger := ThisNo;
Next;
Edit;
FieldByName('F_Step_NO').Asinteger := LastNo;
Post;
Close;
Open;
GoToBookMark(BookMark1);
FreeBookMark(BookMark1);
end;

end;


var
NextNo, ThisNo: integer;
//nextno ÏÂÒ»Á÷³Ì±àºÅ thisno ±¾Á÷³Ì±àºÅ
BookMark1: Tbookmark;
//¶¨ÒåÊéÇ©
begin
//ÏÂÒÆÊý¾Ý
with FlowQ do
begin
ThisNo := FieldByName('F_Step_NO').Asinteger;
Next;
BookMark1 := GetBookMark;
if not Eof then//µ±Î´µ½Î²¼Ç¼
begin
Edit;
// FieldByName('runtime').asinteger:=strtoint(timedbedit.text);
NextNo := FieldByName('F_Step_NO').Asinteger;
FieldByName('F_Step_NO').Asinteger := ThisNo;
Prior;
Edit;
FieldByName('F_Step_NO').Asinteger := NextNo;
Post;
Close;
Open;
GoToBookMark(BookMark1);
FreeBookMark(BookMark1);
end;
 
建议使用拖放操作。
 
给E-Mail,我直接发。
 
数据库最基本的操作---快速入门,请看帖子:http://www.delphibbs.com/delphibbs/dispq.asp?lid=1938340
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1942225
熟读深知子自知,好好地理解一下代码,或许对你有所帮助。
 
hotyei, 我的E-Mail是 zjd_sg@21cn.com, zjd_sg@sohu.com
 
ugvanxk, 汉字显示不正确, 不知道在什么地方执行以上程序, 重新上传一遍好吗?
 
多人接受答案了。
 
后退
顶部