树型控件的处理(完整版)
如何添加数据库中的信息加载到树形控件中?如何遍历控件中的信息?如何对控件中的信息进行增删查改?
数据库设计:
主界面:
代码:
using System;
 using System.Collections.Generic;
 using System.Windows.Forms;
 using TreeSolution.BLL;
 using TreeSolution.Model;
namespace 树型测试
 {
     public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
         }
         //当窗体加载时,加载树形节点
         private void Form1_Load(object sender, EventArgs e)
         {
             T_TreeBLL treeBLL = new T_TreeBLL();
             IEnumerable
             foreach (T_Tree node in tree)
             {
                 TreeNode treeNode = new TreeNode();
                 treeNode.Text = node.Name;
                 treeNode.Tag = node;//将每一个节点所对应的model都放到它的Tag上
                 treeView1.Nodes.Add(treeNode);
                 FillChildren(treeNode,(int)node.Id);
             }
         }
         /// 
         /// 把以parentId为父节点的节点都添加到parentNode下
         /// 
         /// 父节点
         /// 
         private void FillChildren(TreeNode pareNode, int parentId)
         {
             T_TreeBLL treeBLL = new T_TreeBLL();
             IEnumerable
             foreach (T_Tree node in tree)
             {
                 TreeNode treeNode = new TreeNode();
                 treeNode.Text = node.Name;
                 treeNode.Tag = node;//将每一个节点所对应的model都放到它的Tag上
                 pareNode.Nodes.Add(treeNode);
                 //把所有的以我parentid的都加载到我的下面
                 FillChildren(treeNode, (int)node.Id);
             }
         }
         //点击当前节点,显示他的文字
         private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
         {
             string s = e.Node.Text.ToString();
             MessageBox.Show(s);
         }
         //遍历节点
         #region 遍历节点
         private void button1_Click(object sender, EventArgs e)
         {
             foreach (TreeNode node in treeView1.Nodes)
             {
                 DisplayNode(node);
             }
         }
         //递归调用的节点
         private void DisplayNode(TreeNode node)
         {
             textBox1.AppendText(node.Text + "rn");
             if (node.Nodes.Count > 0)
             {
                 foreach (TreeNode childNode in node.Nodes)
                 {
                     DisplayNode(childNode);
                 }
             }
         } 
         #endregion
         /// 
         /// 修改节点
         /// 
         /// 
         /// 
         private void button2_Click(object sender, EventArgs e)
         {
             T_Tree model = (T_Tree)treeView1.SelectedNode.Tag;
             EditNode form = new EditNode();
             form.NodeName = model.Name;
             form.NodeBody = model.Body;
             if (form.ShowDialog() == DialogResult.OK)
             {
                 model.Name = form.NodeName;
                 model.Body = form.NodeBody;
                 new T_TreeBLL().Update(model);
             }
         }
  
 /// 
         /// 添加根节点
         /// 
         /// 
         /// 
         private void btnAddRootNode_Click(object sender, EventArgs e)
         {
             EditNode form = new EditNode();
             if (form.ShowDialog()!=DialogResult.OK)
             {
                 return;
             }
             T_Tree model = new T_Tree();
             model.Name = form.NodeName;
             model.Body = form.NodeBody;
             model.ParentId = 0;
             //添加信息并返回新添加的Id
             int id=new T_TreeBLL().AddNew(model);
             //将新增的Id赋给对象
             model.Id = id;
             //添加节点到Treeview控件上
             TreeNode node=new TreeNode();
             node.Text=model.Name;
             node.Tag = model;
             treeView1.Nodes.Add(node);
             
         }
         //增加子节点
         private void btnAddChildNode_Click(object sender, EventArgs e)
         {
             TreeNode selectedNode = treeView1.SelectedNode;
             if (selectedNode == null)
             {
                 MessageBox.Show("没有节点被选中");
                 return;
             }
             EditNode form = new EditNode();
             if (form.ShowDialog()!=DialogResult.OK)
             {
                 return;
             }
             //获得选中节点的(父节点的)模型对象
             T_Tree parentModel=(T_Tree)selectedNode.Tag;
             T_Tree model = new T_Tree();
             //EditNode form = new EditNode();
             model.Name = form.NodeName;
             model.Body = form.NodeBody;
             model.ParentId = parentModel.Id;
             model.Id=new T_TreeBLL().AddNew(model);
             //添加节点
             TreeNode treeNode = new TreeNode();
             treeNode.Text = model.Name;
             treeNode.Tag = model;
             selectedNode.Nodes.Add(treeNode);
        }
         //删除节点
         private void btnDelete_Click(object sender, EventArgs e)
         {
             //选中节点
             TreeNode selectedNode = treeView1.SelectedNode;
             if (selectedNode == null)
             {
                 MessageBox.Show("没有节点被选中");
                 return;
             }
             selectedNode.Remove();
             T_Tree model = (T_Tree)selectedNode.Tag;
             new T_TreeBLL().DeleteAllNode((int)model.Id);
         }
    }
 }
 
修改界面:
代码:
using System;
 using System.Windows.Forms;
namespace 树型测试
 {
     public partial class EditNode : Form
     {
         public EditNode()
         {
             InitializeComponent();
         }
        public string NodeName
         {
             get { return txtName.Text; }
             set { txtName.Text = value; }
         }
         public string NodeBody
         {
             get { return txtBody.Text; }
             set { txtBody.Text = value; }
         }
        private void button1_Click(object sender, EventArgs e)
         {
             DialogResult = DialogResult.OK;
         }
        private void button2_Click(object sender, EventArgs e)
         {
             DialogResult = DialogResult.Cancel;
         }
     }
 }
 
总图:
sqlhelper:
代码:
using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Configuration;
 using System.Data.SqlClient;
 using System.Data;
namespace TreeSolution.DAL
 {
     class SqlHelper
     {
         public static readonly string connstr = 
             ConfigurationManager.ConnectionStrings["dbconnstr"].ConnectionString;
        public static int ExecuteNonQuery(string cmdText,
             params SqlParameter[] parameters)
         {
             using (SqlConnection conn = new SqlConnection(connstr))
             {
                 conn.Open();
                 using (SqlCommand cmd = conn.CreateCommand())
                 {
                     cmd.CommandText = cmdText;
                     cmd.Parameters.AddRange(parameters);
                     return cmd.ExecuteNonQuery();
                 }
             }
         }
        public static object ExecuteScalar(string cmdText,
             params SqlParameter[] parameters)
         {
             using (SqlConnection conn = new SqlConnection(connstr))
             {
                 conn.Open();
                 using (SqlCommand cmd = conn.CreateCommand())
                 {
                     cmd.CommandText = cmdText;
                     cmd.Parameters.AddRange(parameters);
                     return cmd.ExecuteScalar();
                 }
             }
         }
        public static DataTable ExecuteDataTable(string cmdText,
             params SqlParameter[] parameters)
         {
             using (SqlConnection conn = new SqlConnection(connstr))
             {
                 conn.Open();
                 using (SqlCommand cmd = conn.CreateCommand())
                 {
                     cmd.CommandText = cmdText;
                     cmd.Parameters.AddRange(parameters);
                     using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
                     {
                         DataTable dt = new DataTable();
                         adapter.Fill(dt);
                         return dt;
                     }
                 }
             }
         }
        public static SqlDataReader ExecuteDataReader(string cmdText,
             params SqlParameter[] parameters)
         {
             SqlConnection conn = new SqlConnection(connstr);
             conn.Open();
             using (SqlCommand cmd = conn.CreateCommand())
             {
                 cmd.CommandText = cmdText;
                 cmd.Parameters.AddRange(parameters);
                 return cmd.ExecuteReader(CommandBehavior.CloseConnection);
             }
         }
     }
 }
 
三层模型的代码:
model:
using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
namespace TreeSolution.Model
 {
     partial class T_Tree
     {
         public System.Int32? Id { get; set; }
         public System.Int32? ParentId { get; set; }
         public System.String Name { get; set; }
         public System.String Body { get; set; }
     }
 }
 
DAL:
using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using TreeSolution.Model;
 using System.Data.SqlClient;
 using System.Data;
 namespace TreeSolution.DAL
 {
     partial class T_TreeDAL
     {
         /// 
         /// 添加数据
         /// 
         /// 数据模型
         /// 
         public int AddNew(T_Tree model)
         {
             string sql = "insert into T_Tree(ParentId,Name,Body) output inserted.id values(@ParentId,@Name,@Body)";
             int id = (int)SqlHelper.ExecuteScalar(sql
             , new SqlParameter("ParentId", model.ParentId)
             , new SqlParameter("Name", model.Name)
             , new SqlParameter("Body", model.Body)
             );
             return id;
         }
         /// 
         /// 更新数据
         /// 
         /// 一个数据模型
         /// 
         public bool Update(T_Tree model)
         {
             string sql = "update T_Tree set  ParentId=@ParentId,Name=@Name,Body=@Body where id=@id";
             int rows = SqlHelper.ExecuteNonQuery(sql
             ,new SqlParameter("Id", model.Id)
             ,new SqlParameter("ParentId", model.ParentId)
             ,new SqlParameter("Name", model.Name)
             ,new SqlParameter("Body", model.Body)
             );
             return rows > 0;
         }
         /// 
         /// 删除某一节点
         /// 
         /// id号
         /// 
         public bool Delete(int id)
         {
             int rows = SqlHelper.ExecuteNonQuery("delete from T_Tree where  id=@id",
             new SqlParameter("id",id));
             return rows > 0;
         }
         /// 
         /// 将一行数据转化为model
         /// 
         /// 
         /// 
         private static T_Tree ToModel(DataRow row)
         {
             T_Tree model = new T_Tree();
             model.Id = row.IsNull("Id")?null:(System.Int32?)row["Id"];
             model.ParentId = row.IsNull("ParentId")?null:(System.Int32?)row["ParentId"];
             model.Name = row.IsNull("Name")?null:(System.String)row["Name"];
             model.Body = row.IsNull("Body")?null:(System.String)row["Body"];
             return model;
         }
         /// 
         /// 获得Id为多少的对象
         /// 
         /// 
         /// 
         public T_Tree Get(int id)
         {
             DataTable dt = SqlHelper.ExecuteDataTable("select * from T_Tree  whereid=@id",
             new SqlParameter("id",id));
             if (dt.Rows.Count > 1)
             {throw new Exception("more than 1 row was found");}
             if (dt.Rows.Count <= 0){return null;}
             DataRow row = dt.Rows[0];
             T_Tree model = ToModel(row);
             return model;
         }
         /// 
         /// 获得几级节点
         /// 
         /// 
         /// 
         public IEnumerable
         {
             List
             DataTable dt = SqlHelper.ExecuteDataTable("select * from T_Tree  whereParentId=@parentid",
             new SqlParameter("parentid", id));
             foreach (DataRow row in dt.Rows)
             {
                 list.Add(ToModel(row));
             }
             return list;
         }
         /// 
         /// 返回所有的T_Tree对象
         /// 
         /// 
         public IEnumerable
         {
             List
             DataTable dt = SqlHelper.ExecuteDataTable("select * from T_Tree");
             foreach (DataRow row in dt.Rows){
                 list.Add(ToModel(row));
             }
             return list;
         }
       //删除当前节点的所有子节点
         public void DeleteAllNode(int id)
         {
             IEnumerable
             foreach (T_Tree model in children)
             {
                 DeleteAllNode((int)model.Id);
             }
             Delete(id);
         }
}
 }
 
BLL:
using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using TreeSolution.Model;
 using TreeSolution.DAL;
 namespace TreeSolution.BLL
 {
     partial class T_TreeBLL
     {
         /// 
         /// 添加数据
         /// 
         /// 
         /// 
         public int AddNew(T_Tree model)
         {
             return new T_TreeDAL().AddNew(model);
         }
         /// 
         /// 删除数据
         /// 
         /// 
         /// 
         public bool Delete(int id)
         {
             return new T_TreeDAL().Delete(id);
         }
         /// 
         /// 更新数据
         /// 
         /// 
         /// 
         public bool Update(T_Tree model)
         {
             return new T_TreeDAL().Update(model);
         }
         /// 
         /// 查询某一Id的数据
         /// 
         /// 
         /// 
         public T_Tree Get(int id)
         {
             return new T_TreeDAL().Get(id);
         }
         /// 
         /// 返回集合
         /// 
         /// 
         /// 
         public IEnumerable
         {
             return new T_TreeDAL().GetByParentId(id);
         }
         /// 
         /// 查询所有的数据
         /// 
         /// 
         public IEnumerable
         {
             return new T_TreeDAL().ListAll();
         }
        /// 
         /// 删除所有节点
         /// 
         /// 
         public void DeleteAllNode(int id)
         {
             new T_TreeDAL().DeleteAllNode(id);
         }    
}
 }
 
标签:
相关文章
- 
                    			无相关信息                            
 
