none
关于TreeView邦定数据库存问题 RRS feed

  • 问题

  • 如题,数据库结构如下:
    ID   PID   MyCount
    1      -1     汽车
    2      -1     飞机
    3      1       汽车轮胎
    4      2       飞机轮胎

    在win form下如何用递归或者循环邦定到treeview控件,本人说的是win form下而不是web form下,winform下的treeview没有ChildNodes,请知道的兄弟给予解答,先谢谢了.
    2009年5月10日 12:08

答案

  • 递归在 WebForm 和 WinFrom 下面并没有不同,不同的就是控件的具体属性

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace X.WinFormsApp
    {
        public partial class X200905102048 : Form
        {
            private DataTable fDataTable;
    
            public X200905102048()
            {
                InitializeComponent();
            }
    
            private void X200905102048_Load(object sender, EventArgs e)
            {
                TreeView fTreeView = new TreeView();
                fTreeView.Dock = DockStyle.Fill;
                this.Controls.Add(fTreeView);
    
                this.InitDataTable();
                this.BuildTree(fTreeView.Nodes, -1);
            }
    
            private void InitDataTable()
            {
                fDataTable = new DataTable();
    
                fDataTable.Columns.Add(new DataColumn("Id", typeof(Int32)));
                fDataTable.Columns.Add(new DataColumn("Pid", typeof(Int32)));
                fDataTable.Columns.Add(new DataColumn("MyCount", typeof(String)));
    
                fDataTable.Rows.Add(new object[] { 1, -1, " 汽车" });
                fDataTable.Rows.Add(new object[] { 2, -1, " 飞机" });
                fDataTable.Rows.Add(new object[] { 3, 1, " 汽车轮胎" });
                fDataTable.Rows.Add(new object[] { 4, 2, " 飞机轮胎" });
            }
    
            private void BuildTree(TreeNodeCollection fNodes, int fPid)
            {
                foreach (DataRow fDatarow in this.fDataTable.Select(string.Format("Pid = {0}", fPid)))
                {
                    TreeNode fNode = new TreeNode((string)fDatarow["MyCount"]);
                    fNodes.Add(fNode);
                    this.BuildTree(fNode.Nodes, (int)fDatarow["Id"]);
                }
            }
        }
    }
    
    


    知识改变命运,奋斗成就人生!
    2009年5月10日 12:55
    版主
  • 你好!
         Nodes 属性包含 TreeNode 对象的集合,每个对象具有一个 Nodes 属性,它可以包含其自己的 TreeNodeCollection
         这里有一个实例,希望对你有帮助:
    http://blog.csdn.net/500ML/archive/2006/09/08/1192937.aspx

    周雪峰
    2009年5月10日 13:03
    版主
  • 谢谢楼上的两位,问题已解决,这里是一个学习好地方.

    • 已标记为答案 兰亭 2009年5月11日 11:43
    2009年5月11日 11:42

全部回复

  • 递归在 WebForm 和 WinFrom 下面并没有不同,不同的就是控件的具体属性

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace X.WinFormsApp
    {
        public partial class X200905102048 : Form
        {
            private DataTable fDataTable;
    
            public X200905102048()
            {
                InitializeComponent();
            }
    
            private void X200905102048_Load(object sender, EventArgs e)
            {
                TreeView fTreeView = new TreeView();
                fTreeView.Dock = DockStyle.Fill;
                this.Controls.Add(fTreeView);
    
                this.InitDataTable();
                this.BuildTree(fTreeView.Nodes, -1);
            }
    
            private void InitDataTable()
            {
                fDataTable = new DataTable();
    
                fDataTable.Columns.Add(new DataColumn("Id", typeof(Int32)));
                fDataTable.Columns.Add(new DataColumn("Pid", typeof(Int32)));
                fDataTable.Columns.Add(new DataColumn("MyCount", typeof(String)));
    
                fDataTable.Rows.Add(new object[] { 1, -1, " 汽车" });
                fDataTable.Rows.Add(new object[] { 2, -1, " 飞机" });
                fDataTable.Rows.Add(new object[] { 3, 1, " 汽车轮胎" });
                fDataTable.Rows.Add(new object[] { 4, 2, " 飞机轮胎" });
            }
    
            private void BuildTree(TreeNodeCollection fNodes, int fPid)
            {
                foreach (DataRow fDatarow in this.fDataTable.Select(string.Format("Pid = {0}", fPid)))
                {
                    TreeNode fNode = new TreeNode((string)fDatarow["MyCount"]);
                    fNodes.Add(fNode);
                    this.BuildTree(fNode.Nodes, (int)fDatarow["Id"]);
                }
            }
        }
    }
    
    


    知识改变命运,奋斗成就人生!
    2009年5月10日 12:55
    版主
  • 你好!
         Nodes 属性包含 TreeNode 对象的集合,每个对象具有一个 Nodes 属性,它可以包含其自己的 TreeNodeCollection
         这里有一个实例,希望对你有帮助:
    http://blog.csdn.net/500ML/archive/2006/09/08/1192937.aspx

    周雪峰
    2009年5月10日 13:03
    版主
  • 谢谢楼上的两位,问题已解决,这里是一个学习好地方.

    • 已标记为答案 兰亭 2009年5月11日 11:43
    2009年5月11日 11:42
  • 不必客气啊!
    欢迎你常常来这里和大家交流啊!
    另外,记得比较你认为正确的答案“标记为答复”
    周雪峰
    2009年5月11日 11:57
    版主