C# Winform TreeView 控件与 Sql server 实现 无限级菜单

数据库结构

--层次结构
create table Area
(
	AreaId int primary key identity(1,1),
	AreaName varchar(50),
	AreaPId int		--父级主Id
)

数据库大概信息
在这里插入图片描述

实体类

public class Area
{
   public int AreaId { get; set; }
   public string AreaName { get; set; }
   public int AreaPId { get; set; }
}

WinFrom TreeView控件与集合无限级菜单

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        List<Area> list = new List<Area>();
        string constr = "数据库连接串";
        using(SqlConnection con = new SqlConnection(constr))
        {
            string sql = "select * from Area";
            using(SqlCommand cmd = new SqlCommand(sql, con))
            {
                con.Open();
                using(SqlDataReader dr = cmd.ExecuteReader())
                {
                	if (dr.HasRows)
	                {
	                    while (dr.Read())
	                    {
	                        Area area = new Area();
	                        area.AreaId = dr.IsDBNull(0) ? 0 : dr.GetInt32(0);
	                        area.AreaName = dr.IsDBNull(1) ? null : dr.GetString(1);
	                        area.AreaPId = dr.IsDBNull(2) ? 0 : dr.GetInt32(2);
	                        list.Add(area);
	                    }
	                }
				}
                
            }
        }

        LoadTreeView(treeView1.Nodes, list);
    }
	//先加载一级菜单
    private void LoadTreeView(TreeNodeCollection node,List<Area> list)
    {
        List<Area> arealist = list.Where(e => e.AreaPId == 0).ToList();
        foreach(Area area in arealist)
        {
            TreeNode node2 = new TreeNode();
            node2.Text =area.AreaName;
            if (list.Where(e => e.AreaPId == area.AreaId).ToList().Count > 0)
            {
                LoadTreeView(node2, list, area.AreaId);
            }
            node.Add(node2);
        }
    }
	//然后加载所有的子菜单
    private void LoadTreeView(TreeNode node, List<Area> list,int AreaPId)
    {
        List<Area> areas = list.Where(e => e.AreaPId == AreaPId).ToList();
        if(areas.Count != 0)
        {
            foreach (Area area in areas)
            {
                TreeNode node2 = new TreeNode();
                node2.Text = area.AreaName;
                if (list.Where(e => e.AreaPId == area.AreaId).ToList().Count > 0)
                {
                    LoadTreeView(node2, list, area.AreaId);
                }
                node.Nodes.Add(node2);
            }
        }
    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值