社区
Delphi
帖子详情
delphi里的dbgrid能实现行的拖动吗?
hibird
2002-11-06 04:17:42
好象没法拖动啊?我在dbgrid的dragdrop,over,begindrag之类的时间里面都写了showmessage,结果在我选中行然后拖,毫无反应
我是想把选中某行,然后可以把它拖到指定的行数。
...全文
795
15
打赏
收藏
delphi里的dbgrid能实现行的拖动吗?
好象没法拖动啊?我在dbgrid的dragdrop,over,begindrag之类的时间里面都写了showmessage,结果在我选中行然后拖,毫无反应 我是想把选中某行,然后可以把它拖到指定的行数。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
oop80
2002-11-07
打赏
举报
回复
把dbgrid的DragMode改成dmAutomatic后,dbgrid开始接受drag消息。
开始的位置你肯定知道的了,dbgrid的selectindex属性
在dragend事件中你可以用sendmessage发送WM_LBUTTONDOWN 和 WM_LBUTTONUP消息,这样不就是模拟了一次鼠标click?然后你再读取selectindex属性,就可以得到结束时在哪条记录上。
满意了吗?
wanderung
2002-11-07
打赏
举报
回复
uo
hibird
2002-11-07
打赏
举报
回复
表是按哪个field排序的我是知道的,我只要把表的该field直改成相应数值就好了。
但我不知道行拖动事件何时触发和结束的,触发和结束时各在哪条记录上。
oop80
2002-11-07
打赏
举报
回复
不行的啊,你要知道,表中的记录是没有顺序的。你对一个记录进行修改后不一定能确保它还在原来的位置,即使不修改它的位置也有可能改变。
hibird
2002-11-07
打赏
举报
回复
我是想改table的内容啊
我是想点中行然后拖动开始时得到点中行的记录号,然后释放时得到当时鼠标所在行的记录号,然后根据这两个不就可以修改记录和相应的次序吗
这样做也不行吗?
oop80
2002-11-07
打赏
举报
回复
dbgrid和table或者query相联,它里面的顺序也就是query和table里的顺序,也就是select出来的顺序,数据库原理里有一条是元组没有顺序的说。
所以用简单的方法好象是不能实现的了。
hibird
2002-11-07
打赏
举报
回复
你说的不还是重写控件吗?
我的是一个程序里用到了很多个dbgrid,只有一个需要实现行记录的拖动
所以我想当触发行拖动时,在相应的事件代码中修改记录,然后就实现了行的拖动
这样能行吗?
F1OnEverest
2002-11-07
打赏
举报
回复
不改控件,通过程序代码实现可以啊,哈哈,不过你还是要继承dbgrid ,然后写代码实现之,很少见过有这样需求的,列的拖动是有
hibird
2002-11-07
打赏
举报
回复
谢谢,虽然运行结果和我想得不太一样,但我知道怎么回事了
马上结贴。
伯猿虫
2002-11-07
打赏
举报
回复
unit GridU1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, Db, DBTables, Grids, DBGrids, StdCtrls;
type
TForm1 = class(TForm)
MyDBGrid1: TDBGrid;
Table1: TTable;
DataSource1: TDataSource;
Table2: TTable;
DataSource2: TDataSource;
MyDBGrid2: TDBGrid;
procedure MyDBGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure MyDBGrid1DragOver(Sender, Source: TObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
procedure MyDBGrid1DragDrop(Sender, Source: TObject;
X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var
SGC : TGridCoord;
procedure TForm1.MyDBGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
DG : TDBGrid;
begin
DG := Sender as TDBGrid;
SGC := DG.MouseCoord(X,Y);
if (SGC.X > 0) and (SGC.Y > 0) then
(Sender as TDBGrid).BeginDrag(False);
end;
procedure TForm1.MyDBGrid1DragOver(Sender, Source: TObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
var
GC : TGridCoord;
begin
GC := (Sender as TDBGrid).MouseCoord(X,Y);
Accept := Source is TDBGrid and (GC.X > 0) and (GC.Y > 0);
end;
procedure TForm1.MyDBGrid1DragDrop(Sender, Source: TObject;
X, Y: Integer);
var
DG : TDBGrid;
GC : TGridCoord;
CurRow : Integer;
begin
DG := Sender as TDBGrid;
GC := DG.MouseCoord(X,Y);
with DG.DataSource.DataSet do begin
with (Source as TDBGrid).DataSource.DataSet do
Caption := 'You dragged "'+Fields[SGC.X-1].AsString+'"';
DisableControls;
CurRow := DG.Row;
MoveBy(GC.Y-CurRow);
Caption := Caption+' to "'+Fields[GC.X-1].AsString+'"';
MoveBy(CurRow-GC.Y);
EnableControls;
end;
end;
end.
hibird
2002-11-07
打赏
举报
回复
不行的
首先,selectedindex取的是列号,不过这没关系,我取tabel.recno就好了
但要命的是,dragmode改成dmAutomatic后,dbgrid开始接受drag消息,但是这时鼠标点击后无法选中行了,所以虽然sendmessage了,记录还是在原来的位置上。
hibird
2002-11-06
打赏
举报
回复
能不改控件,通过程序代码实现吗?
我想通过dbgrid拖动时触发的事件,再修改记录集的index field值来实现
但是找不到相应的事件
pdbird
2002-11-06
打赏
举报
回复
同意楼上,你可以自己改写Tdbgrid
那就完全可以实现了
jiaclassmate
2002-11-06
打赏
举报
回复
用STringGrid写吧。
ddvboy
2002-11-06
打赏
举报
回复
不可以的!
除非你在程序中用代码实现!
或去找找有没有这类型的控件
delphi
动态配置
DB
grid
列显示类
delphi
db
grid
+clientdataSet
实现
的动态配置
db
grid
显示列类,输入一个xml文件,单保存即可把
db
grid
中所有列保存到xml中,还可以
拖动
,修改是否显示,显示宽度。
delphi
中
DB
Grid
应用全书
Delphi
中
DB
Grid
用法,Pascal语言
delphi
db
grid
实现
delphi
的
DB
GRID
点击之后
实现
编辑框的数据跟着显示
手动编写
DB
Grid
控件的好例子
通过custom control,自己编写类来产生
DB
Grid
表格。
db
grid
eh 滚动选定记录不改变
DB
Grid
Eh让选择的记录不随垂直滚动条滚动而移动 使用
Delphi
的人都知道,
Delphi
中的
Grid
与PB或者其他的
Grid
有区别,就是在滚动时记录指针会跟着改变。能不能做到像PB中的DataWindow一样滚动时选定记录不改变呢?
Delphi
5,927
社区成员
262,931
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章