使用场景
选中左侧树的某个节点,在右侧表格中显示此节点下的数据list,如果想拖动其中一条数据到另一个树节点下。该如何操作呢。
实现代码
添加grid的MouseDown
事件:
private void gridMouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
orgTreeView.AllowDrop = true; //设置树控件允许接收拖动数据
object data = seizeMyDragData(); //抓取数据
//做拖动操作
DoDragDrop(person, DragDropEffects.Copy | DragDropEffects.Move);
}
}
为树控件添加 DraEnter
和 DragDrop
事件
DraEnter
事件:
private void treeView_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("拖动数据的全命名空间类型"))
{
e.Effect = DragDropEffects.Move; //产生拖拽效果
}
else
{
e.Effect = DragDropEffects.None;
}
}
DragDrop事件:
private void treeView_DragDrop(object sender, DragEventArgs e)
{
try
{
var person = e.Data.GetData(typeof(Person)) as Person;
//新的组织
var pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
var targeNode = orgTreeView.GetNodeAt(pt);
if (targeNode == null)
{
//添加提示信息
return;
}
moveDataToNewOrg(person, neworg);
}
catch (Exception ex)
{
//异常处理
}
}