原贴:
http://topic.csdn.net/u/20080718/13/165e9aad-ad40-4ed2-83a6-2558a07afbcf.html

左边是treeview,是部门类别,右边是dbgrieh,是员工,我想实现将员工拖动进入treeview中,最好有代码呀
代码来了!……亲测无误,需要源码可以发信息给我。给分谢谢!  :-)

Delphi(Pascal) code

var
sgc : TGridCoord;
//拖曳源的Grid信息

procedure TForm1.FormCreate(Sender: TObject);
begin
Self.TreeView1.FullExpand;
//把节点都展开了才好拖放啊
end;

procedure TForm1.DBGridEh1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
sgc :
= DBGridEh1.MouseCoord(X,Y) ; //得到鼠标按下位置的Grid信息
if (sgc.X>0) and (sgc.Y>0) then //x和y都大于0表示是正常的DataCell而不是Header
DBGridEh1.BeginDrag(false);
//开始Drag
end;

procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState;
var Accept: Boolean);
begin
Accept :
= (Source is TDBGridEh); //只要是从DBGridEh拖过来的就接收
end;

procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
pNode:TTreeNode;
begin
pNode :
= TTreeView(Sender).GetNodeAt(X,Y); //根据Drop位置找到节点
with (Source as TDBGridEh).DataSource.DataSet do begin

{把源Grid的数据作为子节点增加进TreeView中,要把变化更新到数据库也是在这里做的}
TTreeView(Sender).Items.AddChild(pNode, Fields[sgc.X
-1].AsString );

end;
if pNode<>nil then pNode.Expand(false); //展开新的节点
end;
posted on 2008-09-06 23:35  漂流侠  阅读(395)  评论(0编辑  收藏  举报