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;
using System.Data.SqlClient;
namespace treeview
{
/// <summary>
/// SelectNodes选择的节点,要更新的
/// flag判断是否更新成功
/// employeeName员工表中员工姓名的列号
/// dept部门中部门名称的列号
/// </summary>
public partial class Form1 : Form
{
int employeeName = 0 ;
int dept = 0;
int employeeDept = 5;
public static string SelectNodes;
bool flag = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Form1加载时数据绑定
dataBindTreeView();
}
//返回一个链接池
public SqlConnection getCon()
{
return new SqlConnection("server=.;database=Personnel_Manage;User ID=sa;pwd=123");
}
//得到一个包含员工表和部门表的数据集DataSet
public DataSet getDs()
{
SqlConnection con = getCon();
SqlCommand cmd = new SqlCommand("select * from employee;select * from Dept", con);
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = cmd;
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;
}
//绑定TreeView的方法
public void dataBindTreeView()
{
this.treeView1.Nodes.Clear();
DataSet dsAll = getDs();
DataTable Tables1 = dsAll.Tables[0];
DataTable Tables2 = dsAll.Tables[1];
for (int i = 0; i < Tables2.Rows.Count; i++)
{
TreeNode NodeDept = new TreeNode();
NodeDept.Text = Tables2.Rows[i][dept].ToString();
for (int j = 0; j < Tables1.Rows.Count; j++)
{
TreeNode NodeEmployee = new TreeNode();
string DeptN = Tables1.Rows[j][employeeDept].ToString().Trim();
if (DeptN == NodeDept.Text.Trim())
{
NodeEmployee.Text = Tables1.Rows[j][employeeName].ToString().Trim();
NodeDept.Nodes.Add("", NodeEmployee.Text, 3, 4);
}
}
treeView1.Nodes.Add(NodeDept);
}
}
//把拖放后的变化数据存入数据库
public bool UpDataDataBase(string nodeDept,string nodeEmployee)
{
SqlConnection con = getCon();
SqlCommand cmdu = new SqlCommand("UPDATE employee SET Employeebranch = " + "'" + nodeDept + "'where Employeename = '" + nodeEmployee + "'",con);
con.Open();
int count = cmdu.ExecuteNonQuery();
//成功更新返回true
if (count > 0)
return true;
else
return false;
}
#region
//如果使用者移出视窗外,便会引发DragLeave事件。
//如果滑鼠进入另一个控制项,便会引发该控制项的DragEnter事件。
//如果滑鼠移动,但是待在相同的控制项内,便会引发DragOver事件。
#endregion
#region //treeView绑定
//treeView拖动中用于存放“鼠标”上的节点
private TreeNode MyNode;
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
//启动拖放操作,设置拖放类型为Move(移动)
TreeView theTreeView = (TreeView)sender;
TreeNode MoveNode = (TreeNode)e.Item;
if(MoveNode.Parent == null)
theTreeView.AllowDrop = false;
else
{
theTreeView.AllowDrop = true;
}
//执行拖放方法,参数是要拖放的Node和类型move
DoDragDrop(e.Item, DragDropEffects.Move);
}
private void treeView1_DragEnter(object sender, DragEventArgs e)
{
// 获取TreeNode节点类型的数据
TreeNode Objdata = (TreeNode)e.Data.GetData(typeof(TreeNode));
if (Objdata != null)
{
e.Effect = DragDropEffects.Move;
//改变进入TreeNode的背景色(土×××)表示你要拖动的节点,
Objdata.BackColor = Color.FromArgb(195, 90, 0);
//保存此TreeNode,进入下一个时还原背景色
MyNode = Objdata;
}
else e.Effect = DragDropEffects.None;
}
private void treeView1_DragOver(object sender, DragEventArgs e)
{
//修改鼠标进入TreeNode的背景色,还原上一个TreeNode的背景色
TreeView NowTree = (TreeView)sender;
TreeNode CneterNode = NowTree.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));
if ((CneterNode != null) && (CneterNode != MyNode))
{
//指定颜色,(滑动过节点的背景颜色,)
MyNode.BackColor = Color.White;
//知道滑动过节点的字体颜色
MyNode.ForeColor = Color.Green;
if (CneterNode.Parent == null)
{
//如果是“部门节点”把颜色换成蓝色
CneterNode.BackColor = Color.FromArgb(95, 51, 255);
CneterNode.ForeColor = Color.White;
}
//一般节点为淡绿色
else
CneterNode.BackColor = Color.FromArgb(164, 220, 13);
MyNode = CneterNode;
}
}
private void treeView1_DragDrop(object sender, DragEventArgs e)
{
TreeNode theNode = (TreeNode)e.Data.GetData(typeof(TreeNode));
SelectNodes = theNode.Text;
TreeView theTree = (TreeView)sender;
TreeNode targetNode = theTree.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));
targetNode.ForeColor = Color.Green;
if (targetNode.Parent == null)
{
if (targetNode != null)
{
TreeNode targetParent = targetNode.Parent;
//删除拖放的TreeNode
theNode.Remove();
//添加到目标TreeNode下
targetNode.Nodes.Add(theNode);
targetNode.BackColor = Color.White;
theTree.SelectedNode = targetNode;
}
string parentsText = targetNode.Text;
if (UpDataDataBase(parentsText, SelectNodes))
{
flag = true;
MessageBox.Show("添加成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
SelectNodes = "";
}
else
{
MessageBox.Show("请重新选择选择员工", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
dataBindTreeView();
}
}
else
{
MessageBox.Show("请选择部门", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
if (!flag)
{
dataBindTreeView();
}
}
}
}
转载于:https://blog.51cto.com/levishow/551494