TreeView拖拽节点改变节点顺序
代码如下:
private void treeView2_ItemDrag(object sender, ItemDragEventArgs e)
{
//文件夹不允许移动,只能移动表格,我在表格节点的TreeNode.ToolTipText中添加了表格信息,作为区分,当然也可以判定节点的TreeNode.Nodes.Count==0 来判断
if ((e.Item as TreeNode).ToolTipText == null || (e.Item as TreeNode).ToolTipText == "")
{
MessageBox.Show("该文件夹不允许移动,请选择工程编辑目录表格!", "提示");
return;
}
//开始进行拖放操作,将节点信息储存并将拖放的效果设置成移动
this.DoDragDrop(e.Item, DragDropEffects.Move);
}
private void treeView2_DragEnter(object sender, DragEventArgs e)
{
//检测储存的在拖放数据中的数据是否是你要,判断数据类型,如果是就将拖放的效果设置成移动,不是则不再进行拖放操作
if (e.Data.GetDataPresent(typeof(TreeNode)))
{
e.Effect = DragDropEffects.Move;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void treeView2_DragDrop(object sender, DragEventArgs e)
{
Point Position = new Point(0, 0);//用于检索二位平面中的节点
TreeNode myNode = null;//用于储存拖放数据中的数据
if (e.Data.GetDataPresent(typeof(TreeNode)))
{
myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));//得到数据
}
else
{
MessageBox.Show("当前操作错误!");
}
Position.X = e.X;
Position.Y = e.Y;
Position = treeView2.PointToClient(Position);
TreeNode DropNode = this.treeView2.GetNodeAt(Position);//得到目标节点
//1.目标节点不是空 2.目标节点和被拖拽节点是同一父节点 3.目标节点不是被拖拽节点本身
if (DropNode != null && DropNode.Parent == myNode.Parent && DropNode != myNode)
{
TreeNode DragNode = myNode;
int index = DropNode.Index;//获取目标节点的index值,用于插入被拖拽节点
//将被拖拽节点从原来位置删除
myNode.Remove();
//将被拖拽节点插入到目标节点位置
DropNode.Parent.Nodes.Insert(index, DragNode);
this.treeView2.SelectedNode = DragNode;
///
/*如果需要修改数据库可在此添加数据修改方法*/
///
}
else if (DropNode.Parent != myNode.Parent)
{
MessageBox.Show("表格'" + myNode.Text + "'不是'" + DropNode.Parent.Text + "'类型的表格,不能进行拖拽","提示");
}
}