嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
我在之前很多文章里面,介绍过Winform主界面的开发,基本上都是标准的界面,在顶部放置工具栏,中间区域则放置多文档的内容,但是在顶部菜单比较多的时候,就需要把菜单分为几级处理,如可以在顶部菜单放置一二级菜单,这种方式在一般功能点不算太多的情况下,呈现的界面效果较为直观、也较为美观。不过随着一些系统功能的增多,这种方式可能就会显得工具栏比较拥挤,那么我们是否可以在左侧放置一个树形列表,这样通过树形列表的收缩折叠,就可以放置非常多的菜单功能了。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace TreeViewLearn
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnAddTotal_Click(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(textBox1.Text.Trim()))
{
MessageBox.Show("请填写要添加的节点名称!");
return;
}
string sql = "insert into TreeTest(nodeName,parentId) output inserted.id values" "(" " " "'" textBox1.Text.Trim() "'" "," "'" 0 "'" ")";
int id = (int)sqlHelper.ExecuteScalar(sql);
TreeNode node1 = new TreeNode();
node1.Tag = id;
node1.Text = textBox1.Text.Trim();
treeView1.Nodes.Add(node1);
textBox1.Text = "";
}
private void btnAddChild_Click(object sender, EventArgs e)
{
int id;
if(string.IsNullOrEmpty(textBox1.Text.Trim()))
{
return;
}
if(treeView1.SelectedNode==null)
{
MessageBox.Show("请选择父节点");
return;
}
id =(int)treeView1.SelectedNode.Tag;
string sql = "insert into TreeTest(nodeName,parentId) output inserted.id values" "(" " " "'" textBox1.Text.Trim() "'" "," "'" id "'" ")";
int id1 = (int)sqlHelper.ExecuteScalar(sql);
TreeNode node1 = new TreeNode();
node1.Tag = id1;
node1.Text = textBox1.Text.Trim();
treeView1.SelectedNode.Nodes.Add(node1);
textBox1.Text = "";
}
private void treeView1_Leave(object sender, EventArgs e)
{
//失去焦点事件
//treeView1.SelectedNode.BackColor = Color.Blue;
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
textBox1.Text = treeView1.SelectedNode.Name;
}
private void Form1_Load(object sender, EventArgs e)
{
setTreeView(treeView1, 0);
}
private void button1_Click(object sender, EventArgs e)
{
Form2 fr = new Form2();
fr.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
SqlConnection connec = sqlHelper.getcon();
if(connec.State==ConnectionState.Open)
{
MessageBox.Show(connec.State.ToString());
MessageBox.Show("成功连接数据库");
}
}
//调用的时候parentId以0值开始 setTreeView(treeView1, 0);
private void setTreeView(TreeView tr1,int parentId)
{
string sql = "select * from TreeTest where parentId=" parentId;
DataTable ds= sqlHelper.ExecuteDataTable(sql);
if (ds.Rows.Count > 0)
{
int pId = -1;
foreach (DataRow row in ds.Rows)
{
TreeNode node = new TreeNode();
node.Text = row["nodeName"].ToString();
node.Tag = (int)row["id"];
pId = (int)row["parentId"];
if (pId == 0)
{
//添加根节点
tr1.Nodes.Add(node);
}
else
{
//添加根节点之外的其他节点
RefreshChildNode(tr1,node,pId);
}
//查找以node为父节点的子节点
setTreeView(tr1,(int)node.Tag);
}
}
}
//处理根节点的子节点
private void RefreshChildNode(TreeView tr1,TreeNode treeNode, int parentId)
{
foreach (TreeNode node in tr1.Nodes)
{
if((int)node.Tag==parentId)
{
node.Nodes.Add(treeNode);
return;
}else if (node.Nodes.Count > 0)
{
FindChildNode(node, treeNode, parentId);
}
}
}
//处理根节点的子节点的子节点
private void FindChildNode(TreeNode tNode,TreeNode treeNode, int parentId)
{
foreach (TreeNode node in tNode.Nodes)
{
if ((int)node.Tag == parentId)
{
node.Nodes.Add(treeNode);
return;
}else if (node.Nodes.Count > 0)
{
FindChildNode(node,treeNode,parentId);
}
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if(treeView1.SelectedNode==null)
{
MessageBox.Show("请选择要删除的节点!");
return;
}
//选中节点的主键id,也是其子节点的parentId
int id = (int)treeView1.SelectedNode.Tag;
nodeDelete(id);
treeView1.SelectedNode.Remove();
}
//数据表中的数据的递归删除方法
public void nodeDelete(int id)
{
string sql = "select * from TreeTest where parentId=" id;
DataTable ds = sqlHelper.ExecuteDataTable(sql);
if (ds.Rows.Count > 0)
{
//有子节点
foreach(DataRow row in ds.Rows)
{
//先删除父节点
string delete = "delete from TreeTest where id=" id;
int k = sqlHelper.ExecuteNonQuery(delete);
//查找子节点,删除
int id1 = (int)row["id"];
nodeDelete(id1);
}
}
else
{
//没有子节点
string delete = "delete from TreeTest where id=" id;
int k = sqlHelper.ExecuteNonQuery(delete);
}
}
private void button3_Click(object sender, EventArgs e)
{
treeView1.SelectedNode.Remove();
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if(e.Action!=TreeViewAction.Unknown)
{
if(e.Node.Checked)
{
}
}
}
}
}