C#TreeView数据绑定+拖动节点
来源:互联网 发布:鸡鸣狗吠 兄嫂当知之 编辑:程序博客网 时间:2024/06/11 19:59
搞了好几天啊,郁闷死了。以前学习过,但是忘了,现在搞起来还挺头疼!
我的资源上有成品!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace treeview2
{
public partial class Form1 : Form
{
dbhelper db;
string cao = "";
TreeNode tnd;
public Form1()
{
db = new dbhelper();
InitializeComponent();
bdtree();
}
private void bdtree()
{
db.Execute("update t_tree set isbd=0", CommandType.Text);
DataTable dt;//
TreeNode tn;//根目录
TreeNode tn2;//子目录
while (1 == 1)//循环去查数据库中的数据,只要数据中有没有绑定到树上的数据就循环,直到所以数据都绑定到了树上。
{
dt = db.GetDateTable("select * from t_tree where isbd=0 order by gxid");//读取数据库的数据
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)//循环剩下的数据
{
if (dt.Rows[i][2].ToString() == "0")//根目录
{
tn = new TreeNode();
tn.Text = dt.Rows[i][1].ToString();
tn.Tag = dt.Rows[i][0].ToString();//标记
treeView1.Nodes.Add(tn);
db.Execute("update t_tree set isbd=1 where id=" + dt.Rows[i][0].ToString() + "", CommandType.Text);//把添加过的节点在数据库中修改下属性 isbd是否绑定属性。0为没有绑定,1为绑定。
}
else//非根目录
{
foreach (TreeNode ts in treeView1.Nodes)
{
TreeNode targetNode = SearchNode(ts, dt.Rows[i][2].ToString());
if (targetNode != null)
{
tn2 = new TreeNode();
tn2.Text = dt.Rows[i][1].ToString();
tn2.Tag = dt.Rows[i][0].ToString();
targetNode.Nodes.Add(tn2);
db.Execute("update t_tree set isbd=1 where id=" + dt.Rows[i][0].ToString() + "", CommandType.Text);
break;
}
}
}
}
}
else
{
break;
}
}
}
//------------------------------------------------------------------------------------------------------------破递归郁闷死我了
private TreeNode SearchNode(TreeNode td, string selectParentNum)//递归
{
if (td.Tag.ToString() == selectParentNum)
{
return td;
}
TreeNode targetNode = null;
foreach (TreeNode childNodes in td.Nodes)
{
targetNode = SearchNode(childNodes, selectParentNum);
if (targetNode != null)
break;
}
return targetNode;
}
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
cao = e.Item.ToString();
cao = cao.Substring(10);//获取选中的节点名字
tnd = (TreeNode)e.Item;
DataTable dt2 = db.GetDateTable("select * from t_tree where name='" + cao + "'");
this.DoDragDrop(e.Item, DragDropEffects.Move);
}
private void treeView1_DragDrop(object sender, DragEventArgs e)
{
//获得拖放中的项
// ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
//TreeView tr = (TreeView)e.Data.GetData(typeof(TreeView));// e.Data.ToString();
//string a=tr.Nodes.ToString();
//string cao =e.Data.ToString();//;;.Data.ToString();
//根据鼠标坐标确定要移动到的目标节点
Point pt;
TreeNode targeNode;
pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));
targeNode = this.treeView1.GetNodeAt(pt);
TreeNode NewMoveNode = new TreeNode(cao);//给挪动的节点创建个TreeNode
if (targeNode != null)//如果目标节点未选中,则添加到一级节点
{
string mb = targeNode.Text;//挪动到的那个节点
DataTable dt = db.GetDateTable("select * from t_tree where name='" + mb + "'");//查出挪动到得那个节点的id,即子节点的关系id
db.Execute("update t_tree set gxid=" + dt.Rows[0][0].ToString() + " where name='" + cao + "'", CommandType.Text);
treeView1.Nodes.Clear();
bdtree();//重调排序方法
//targeNode.Nodes.Add(NewMoveNode);
////更新当前拖动的节点选择
//treeView2.SelectedNode = NewMoveNode;
//展开目标节点,便于显示拖放效果
targeNode.Expand();
treeView1.ExpandAll();
treeView1.Refresh();
}
else//添加到跟目录上,即一级节点gxid=0
{
db.Execute("update t_tree set gxid=0 where name='" + cao + "'", CommandType.Text);
treeView1.Nodes.Clear();
bdtree();//重调排序方法
//this.treeView2.Nodes.Add(NewMoveNode);
////更新当前拖动的节点选择
//treeView2.SelectedNode = NewMoveNode;
//展开目标节点,便于显示拖放效果
treeView1.ExpandAll();
treeView1.Refresh();
}
}
private void treeView1_DragEnter(object sender, DragEventArgs e)
{
//判定是否现在拖动的数据是LISTVIEW项
//ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
string lvi = e.Data.ToString();
if (lvi != null)
{
e.Effect = DragDropEffects.Move;
treeView1.Nodes.Remove(tnd);
}
else
Cursor = Cursors.No;
}
}
}
- C#TreeView数据绑定+拖动节点
- treeview节点拖动
- treeview节点拖动
- Winform TreeView 节点拖动
- C#DataGridView数据拖动到TreeView中
- C#Window VS2015,Treeview动态绑定树节点绑定sql
- treeview递归绑定节点
- Treeview数据绑定
- TreeView数据绑定方法
- TreeView绑定数据
- 数据绑定到TreeView
- TreeView 绑定多级数据
- TreeView 绑定多级数据
- TreeVIew控件绑定数据
- TreeVIew控件绑定数据
- treeview绑定xml数据
- TreeView递归绑定数据
- winform treeView 数据绑定
- oracle学习笔记2之有返回列表的存储过程
- 正确实现 IDisposable 接口
- Delphi 添加系统托盘
- netbeans查看文件地址插件
- Lowest Bit
- C#TreeView数据绑定+拖动节点
- Java NIO 详解
- 设置或读取config文件(winform)
- java程序员学习Flex和BlazeDS的好处
- replace into
- 关于C语言中逻辑运算和位运算的差别(记一笔)
- 您已经成为CSDN博客专家
- QT中的pro文件的编写
- nfdump软件使用总结