`
冷寒冰
  • 浏览: 251624 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

treeview 递归绑定数据库中的数据 支持web winform

阅读更多

以下是完整代码     附件中是数据表  

 

namespace treeview
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //窗体加载
        private void Form1_Load(object sender, EventArgs e)
        {
            InitGroupTree();

        }
        //得到初始化的树
       public void InitGroupTree()
        {
           
           treeView1.Nodes.Clear();

           GroupNode rootGroupNode =GetGroupNode("e1f6d5dd-941e-4300-9644-700bc96a24f4");

            TreeNode node = LoadTreeNode(rootGroupNode);

           treeView1.Nodes.Add(node);

            InitSubGroupTree(node, rootGroupNode);

            node.Expand();
        }

     
        private TreeNode LoadTreeNode(GroupNode childGroupNode)
        {

            TreeNode childNode = new TreeNode();
            childNode.Text = childGroupNode.GroupDO.GroupName;
            childNode.Tag = childGroupNode.GroupDO.GroupId.ToString();
         
            //childNode.ExpandAll();

            return childNode;
        }

        private void InitSubGroupTree(TreeNode node, GroupNode groupNode)
        {
            foreach (var childGroupNode in groupNode.ChildGroups)
            {
                TreeNode childNode = LoadTreeNode(childGroupNode);

               // node.ChildNodes.Add(childNode); web中
                node.Nodes.Add(childNode);//winform中
                InitSubGroupTree(childNode, childGroupNode);
            }
        }

        public GroupNode GetGroupNode(string groupId)
        {
            GroupDO groupDO = GetRootNodeDO(groupId);
            if (groupDO == null)
            {
                return null;
            }

            GroupNode groupNode = new GroupNode();
            groupNode.GroupDO = groupDO;//得到根节点 (最顶级节点)


            List<string> childGroupIds = GetChildGroupIds(groupId);
            foreach (string childGroupId in childGroupIds)
            {
                groupNode.ChildGroups.Add(GetGroupNode(childGroupId));
            }

            return groupNode;
        }


        /// <summary>
        /// Get the group by the group ID.
        /// </summary>
        /// <param name="groupId">The group ID.</param>
        /// <returns>The GroupDO object.</returns>
        public GroupDO GetRootNodeDO(string groupId)
        {
            string constring = "Data Source=.;Initial Catalog=CIMSystemDB;User ID=sa;password=123;";
            string sql = "SELECT [GroupId],[GroupName],[Description],[GroupMgrId],[SuperGroupId] FROM [Group] WHERE [GroupId]=@GroupId";
            SqlConnection conn = new SqlConnection(constring);

            try
            {
                SqlParameter parameters = new SqlParameter("@GroupId", groupId);
                SqlCommand cmd = new SqlCommand(sql, conn);
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;
                cmd.Parameters.Add(parameters);

                DataSet ds = new DataSet();
                da.Fill(ds);
                DataTable dataTable = ds.Tables[0];

                GroupDO groupDO = null;

                if (dataTable != null && dataTable.Rows.Count > 0)
                {
                    groupDO = new GroupDO();
                    foreach (DataRow dr in dataTable.Rows)
                    {
                        SetGroupDO(groupDO, dr);
                    }


                }

                return groupDO;
            }
            catch
            {
                MessageBox.Show("发生异常");
                return null;
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
        }
       public void SetGroupDO(GroupDO groupDO, DataRow dataRow)
        {
            groupDO.GroupId =dataRow["GroupID"].ToString();
            groupDO.GroupName =dataRow["GroupName"].ToString();
            groupDO.Description = dataRow["Description"].ToString();
            groupDO.GroupMgrId = dataRow["GroupMgrID"].ToString();
            groupDO.SuperGroupId =dataRow["SuperGroupID"].ToString();
        }
     

        /// <summary>
        /// Get one level child group ID list.
        /// </summary>
        /// <param name="groupId">The group ID.</param>
        /// <returns>The child group ID list.</returns>
        public static List<string> GetChildGroupIds(string groupId)
        {
            string constring = "Data Source=.;Initial Catalog=CIMSystemDB;User ID=sa;password=123;";
            SqlConnection conn=new SqlConnection(constring);
            try
            {
                string sql = "SELECT [GroupID] FROM [Group] WHERE [superGroupID]=@GroupId AND GroupID<>@GroupId AND [Actived]=1 "
                    + " ORDER BY [GroupName]";
                SqlParameter parameters = new SqlParameter("@GroupId", groupId);
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.Add(parameters);
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;
                DataSet ds = new DataSet();
                da.Fill(ds);
                DataTable dataTable =ds.Tables[0];
             
                List<string> childGroupIds = new List<string>();

                if (dataTable != null)
                {
                    foreach (DataRow dataRow in dataTable.Rows)
                    {
                        childGroupIds.Add(dataRow["groupID"].ToString());
                    }
                }

                return childGroupIds;
            }
            catch
            {
                MessageBox.Show("发生异常");
                return null;
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
        }

    }
    
}

//用到的两个类文件如下:

 public class GroupDO
    {

        public string GroupId { get; set; }
        public string GroupName { get; set; }
        public string Description { get; set; }
        public string GroupMgrId { get; set; }
        public string SuperGroupId { get; set; }
    }

 

 

 

 

public  class GroupNode
    {
        public GroupDO GroupDO {get;set; }
        public List<GroupNode> ChildGroups { get; set; }
        public GroupNode()
        {
            ChildGroups = new List<GroupNode>();
        }
    }

0
0
分享到:
评论

相关推荐

    WinForm_TreeView递归绑定Demo

    WinForm_TreeView递归绑定Demo,可以参考如何时候递归实现TreeView的绑定

    winform,treeview数据库绑定数据类Demo

    在这个“winform,treeview数据库绑定数据类Demo”中,我们将探讨如何利用C#编程语言和.NET Framework将数据库中的数据绑定到TreeView控件上,特别是基于id、name和parent_id字段来构建层级关系。 首先,让我们理解...

    C# TreeView递归添加子节点

    在.NET Framework中,`TreeView`控件是一种常用的数据可视化组件,用于展示层次结构数据,比如文件系统、组织结构等。本篇文章将详细讲解如何在C#中使用递归方法为`TreeView`添加子节点,特别是在处理文件夹结构时。...

    Winform中动态加载TreeView控件的值

    总结来说,动态加载TreeView控件的值是Windows Forms开发中常见的任务,主要涉及数据库查询、数据绑定和递归算法的应用。通过这些技术,我们可以构建出能够灵活反映数据库结构的用户界面,提高用户体验。

    C# TreeView无限递归绑定 CheckBox(vs2010)可运行

    这个项目"**C# TreeView无限递归绑定 CheckBox(vs2010)可运行**"是为了演示如何在`TreeView`中添加具有复选框功能的节点,并实现无限递归绑定数据,这对于创建可以展开/折叠并支持多选的复杂数据结构非常有用。...

    C# winform TtreeView控件的无限级数据绑定

    在本教程中,我们将探讨如何在VS2008环境下,结合SQLServer2000数据库,实现TreeView控件的无限级数据绑定。 首先,我们来看`TtreeView`(可能是打字错误,应为`TreeView`)控件的基本使用。TreeView控件由节点...

    使用TreeView进行数据绑定

    对于TreeView控件,这意味着我们可以将层次结构的数据结构(如目录结构、组织架构或数据库表)映射到树状视图中,使用户能够直观地查看和操作这些数据。 常规的数据绑定通常涉及以下步骤: 1. **定义数据源**:这...

    c#windowform实现treeview多层绑定

    在C# Windows Forms开发中,`TreeView`控件是一个常用且功能强大的组件,它能够以树形结构展示数据,非常适合用于表示层次结构的信息。本文将深入探讨如何实现`TreeView`控件的多层动态绑定,以帮助开发者更好地理解...

    Winform TreeView控件无限分级绑定数据&获取选项

    在Windows Forms(Winform)开发中,`TreeView`...综上所述,`Winform TreeView`控件结合递归数据结构和事件处理,可以轻松实现无限分级的数据绑定和用户选择的获取。这种技术在各种需要展示层级关系的场景中非常实用。

    TreeView无限级别绑定

    `TreeView`无限级别绑定的核心在于递归地处理数据和DOM元素。当数据结构为树形时,每一级节点可能有多个子节点,而这些子节点本身又可能有子节点,如此层层嵌套,形成一棵树。为了在界面上正确地展示这棵树,并且...

    winform treeview XML 编辑器

    在Windows Forms(Winform)应用程序开发中,常常需要与用户交互并处理数据,XML作为一种轻量级的数据存储和交换格式,被广泛应用于各种场景。"winform treeview XML 编辑器"是一个专为Winform设计的工具,它结合了...

    winform 根据节点列表生成树

    总结起来,这个例子展示了如何在Winform环境中利用数据绑定和递归算法从节点列表生成树形视图,这对于任何需要展示层次结构数据的项目都非常有用。通过对提供的"TreeTest"文件进行研究,开发者可以学习到数据驱动UI...

    C#WinFrom树形菜单数据绑定

    在C# WinForm开发中,树形菜单(TreeView)是一种常用的数据展示控件,它可以将层级结构的数据以直观的方式呈现给用户。本知识点主要聚焦于如何将数据从数据库读取并绑定到TreeView控件上,实现数据的动态加载和显示...

    C# winform TreeView中关于checkbox选择的完美类

    在C# WinForm开发中,`TreeView`控件是一个常用组件,用于展示层次结构的数据。在某些场景下,我们可能需要在`TreeView`节点上添加复选框(Checkbox),以便用户可以多选节点。本文将深入讲解如何实现`TreeView`控件...

    根据ID,ParentID绑定treeview

    在IT领域,特别是Web开发和GUI编程中,TreeView控件是一种常见的用户界面元素,用于展示层次结构的数据。本文将深入探讨如何根据ID和ParentID来绑定数据,从而生成一个能够直观展示层级关系的TreeView。 首先,我们...

    C#WinForm窗体treeview用法例子

    在C# WinForm开发中,TreeView控件是一个非常常用且功能强大的组件,它允许用户以树状结构展示数据。这个控件通常用于显示文件系统、应用程序的层级结构或者自定义的分类信息。以下是对"C# WinForm窗体treeview用法...

    动态生成 TreeView C#

    2. BindTreeView 方法:该方法负责绑定 TreeView,包括获取数据、创建根节点、递归创建子节点。 3. CreateChildNode 方法:该方法负责递归创建子节点,根据父节点的值,获取子节点的数据,并创建子节点。 相关知识...

    winform 知识库 TreeView树型结构

    这个知识库主要关注如何在Winform应用程序中有效地利用`TreeView`控件来构建树型结构,并且如何遍历和读取与之绑定的数据。下面将详细介绍`TreeView`控件的基本概念、常用属性和方法,以及数据绑定和遍历的策略。 1...

    在WinForm中用TreeView,DataGrid实现XML连接

    通过学习这个实例,开发者可以更好地理解XML数据结构,掌握.NET Framework中的数据绑定机制,以及在WinForm应用中创建用户友好的数据操作界面。在实际开发中,可以根据需求扩展此示例,例如添加错误处理、XML数据...

Global site tag (gtag.js) - Google Analytics