• 树型控件的处理(完整版)


    如何添加数据库中的信息加载到树形控件中?如何遍历控件中的信息?如何对控件中的信息进行增删查改?

    数据库设计:

    主界面:

    代码:

    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<T_Tree> tree = treeBLL.GetByParentId(0);
                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);
                }
            }
            /// <summary>
            /// 把以parentId为父节点的节点都添加到parentNode下
            /// </summary>
            /// <param name="pareNode">父节点</param>
            /// <param name="parentId"></param>
            private void FillChildren(TreeNode pareNode, int parentId)
            {
                T_TreeBLL treeBLL = new T_TreeBLL();
                IEnumerable<T_Tree> tree = treeBLL.GetByParentId(parentId);
                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 + "\r\n");
                if (node.Nodes.Count > 0)
                {
                    foreach (TreeNode childNode in node.Nodes)
                    {
                        DisplayNode(childNode);
                    }
                }
            }
            #endregion
            /// <summary>
            /// 修改节点
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            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);
                }
            }


     

     /// <summary>
            /// 添加根节点
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            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
        {
            /// <summary>
            /// 添加数据
            /// </summary>
            /// <param name="model">数据模型</param>
            /// <returns></returns>
            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;
            }
            /// <summary>
            /// 更新数据
            /// </summary>
            /// <param name="model">一个数据模型</param>
            /// <returns></returns>
            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;
            }
            /// <summary>
            /// 删除某一节点
            /// </summary>
            /// <param name="id">id号</param>
            /// <returns></returns>
            public bool Delete(int id)
            {
                int rows = SqlHelper.ExecuteNonQuery("delete from T_Tree where id=@id",
                new SqlParameter("id",id));
                return rows > 0;
            }
            /// <summary>
            /// 将一行数据转化为model
            /// </summary>
            /// <param name="row"></param>
            /// <returns></returns>
            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;
            }
            /// <summary>
            /// 获得Id为多少的对象
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            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;
            }
            /// <summary>
            /// 获得几级节点
            /// </summary>
            /// <param name="id"></param>
            /// <returns>返回集合</returns>
            public IEnumerable<T_Tree> GetByParentId(int id)
            {
                List<T_Tree> list = new List<T_Tree>();
                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;
            }
            /// <summary>
            /// 返回所有的T_Tree对象
            /// </summary>
            /// <returns>返回T_Tree对象的泛型集合(只读属性)</returns>
            public IEnumerable<T_Tree> ListAll()
            {
                List<T_Tree> list = new List<T_Tree>();
                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<T_Tree> children = GetByParentId(id);
                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
        {
            /// <summary>
            /// 添加数据
            /// </summary>
            /// <param name="model"></param>
            /// <returns></returns>
            public int AddNew(T_Tree model)
            {
                return new T_TreeDAL().AddNew(model);
            }
            /// <summary>
            /// 删除数据
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public bool Delete(int id)
            {
                return new T_TreeDAL().Delete(id);
            }
            /// <summary>
            /// 更新数据
            /// </summary>
            /// <param name="model"></param>
            /// <returns></returns>
            public bool Update(T_Tree model)
            {
                return new T_TreeDAL().Update(model);
            }
            /// <summary>
            /// 查询某一Id的数据
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public T_Tree Get(int id)
            {
                return new T_TreeDAL().Get(id);
            }
            /// <summary>
            /// 返回集合
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public IEnumerable<T_Tree> GetByParentId(int id)
            {
                return new T_TreeDAL().GetByParentId(id);
            }
            /// <summary>
            /// 查询所有的数据
            /// </summary>
            /// <returns></returns>
            public IEnumerable<T_Tree> ListAll()
            {
                return new T_TreeDAL().ListAll();
            }


           /// <summary>
            /// 删除所有节点
            /// </summary>
            /// <param name="id"></param>
            public void DeleteAllNode(int id)
            {
                new T_TreeDAL().DeleteAllNode(id);
            }   

    }
    }

    感谢来访,共同学习!
  • 相关阅读:
    函数方法与面向对象
    seleniums私房菜系列一 ---- selenium简介
    MySQL图形化管理工具
    存储引擎
    mysql自定义函数
    加密函数
    mysql聚合函数
    mysql信息函数
    mysql日期时间函数(常用的)
    mysql比较运算符和函数
  • 原文地址:https://www.cnblogs.com/dingxiaowei/p/3058757.html
Copyright © 2020-2023  润新知