怎样把一条记录从一个DBGrid中用鼠标拖拽到另一个中?
怎么用代码实现啊?
谢谢
怎么用代码实现啊?
谢谢
解决方案 »
- 自己做过私活的朋友进来看一下!!!!!!!!!!!!!!!!!!1111
- 高手请进:关于一文本文件处理的巨难问题
- 有关数据库应用程序用Delphi 6 自带的Installshield制作安装程序的问题——————在线等待!!!!!!
- 请问如何检测计算机中是否装有Modem,并判断是连接在哪个串口上?
- 如何用clientdataset 更新不同的数据表?急急 急 请高手入
- 如何将最小化的图标放在windows的状态下,并会继续在工作的
- 把clientdataset传入dll后,不能访问fields[i]的displayformat
- 求加密算法。
- 我在运行程序时候提示的一个错误!
- 在delphi中如何实现打开一个Excel文件?
- 如何检查局域网里的电脑是否开机?(菜鸟问题)
- 急![在线等,下班就结贴] string和pchar的混用
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, ADODB;type
TForm1 = class(TForm)
ADOTable1: TADOTable;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
DataSource1: TDataSource;
procedure DBGrid2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DBGrid2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if Source is TDBGrid then
Accept := true;
end;procedure TForm1.DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if (sender is TDBGrid) and (source is TDBGrid) then
begin
showmessage((source as tdbgrid).DataSource.DataSet.FieldByName('userid').Value);//把这里改成添加操作,就可以了。
end;
end;procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbleft then
(sender as TDBGrid).BeginDrag(false);
end;end.
上面的例子是假设一个dbgrid1中有字段userId,用户从dbgrid1中拖动当前记录到dbgrid2,并把数据录入dbgrid2。
用下面的添加代码替换上面的.
procedure TForm1.DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if (sender is TDBGrid) and (source is TDBGrid) then
begin
with (Sender as TDBGrid).DataSource.DataSet do
begin
//添加的代码在这里,
if not active then Open;
Insert;
FieldByName('userid').Value := (source as tdbgrid).DataSource.DataSet.FieldByName('userid').Value;
post;
Refresh;
end;
end;
end;
(sender as TDBGrid).BeginDrag(false);这是写在DBGRID1中的,其它的都是写在DBGRID2中的。
DBGrid1.EndDrag();
我写过拖拽的代码
就是不会写从DBGrid拖到另一个DBGrid中
datasourse连在DBGrid1上,把DBGrid1的记录拖到DBGrid2中
没有别的拉
老是没有反应
看看执行到下面的代码时,情况如何;
procedure TForm1.DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if (sender is TDBGrid) and (source is TDBGrid) then
begin
with (Sender as TDBGrid).DataSource.DataSet do
begin
//添加的代码在这里,
if not active then Open;
Insert;
FieldByName('userid').Value := (source as tdbgrid).DataSource.DataSet.FieldByName('userid').Value;
post;
Refresh;
end;
end;
end;
ADOTABLE
按照你的提示 只有一个ADOTABLE啊
就是需要从DBGRID1从获取记录
最后保存
DBGRID1 和DBGRID2 分别有两张表
begin
if (sender is TDBGrid) and (source is TDBGrid) then
begin
with (Sender as TDBGrid).DataSource.DataSet do
begin
//添加的代码在这里, showmessage(FieldByName('userid').asstring);你先用这句,看看能不能从DBGRID1中取得DBGRID1指针所在位置的当前值
end;
end;
end;
拖拽以后增加一条,序号也增加一个:
增加序号我是这么写的:adotable1.FieldByName('userid').Value:=adotable1.RecordCount+1; 不知道对不??
还是出错,field userid cannot modified
报错 不能增加空记录 加了类似上面的语句 还是报错 field userid cannot modified
DBGRid中序号加1的语句是不是写错了
还是什么其他的?
你看看能不能用啊?
dbgrid1.DataSource.DataSet.insert;//追加
dbgrid1.DataSource.DataSet.Post;//提交,保存到数据库
就是增加一条空的记录
估计是搞错了