树型控件的处理(完整版)
如何添加数据库中的信息加载到树形控件中?如何遍历控件中的信息?如何对控件中的信息进行增删查改?
数据库设计:
主界面:
代码:
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);
}
}
}
标签:
相关文章
-
无相关信息