首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于treeview,帮看看哪里有有关问题。菜鸟。

2012-12-27 
关于treeview,帮看看哪里有问题。。初学者。。。using Systemusing System.Collections.Genericusing System.

关于treeview,帮看看哪里有问题。。初学者。。。
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 WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void AddNodes(DataTable dt, string id, string text, string pid)
        {
            DataRow[] dr  =  dt.Select("pid = '" + string.Empty + "'");
            foreach (DataRow drv in dr)
            { 
                TreeNode tn = new TreeNode();
                tn.Text = drv[text].ToString();
                tn.Tag = drv[id];
                treeView1.Nodes.Add(tn);
                AddChild(tn, dt, id, text, pid);
            }
         
        }
        private void AddChild(TreeNode tn, DataTable dt, string id, string text, string pid)
        {
            DataRow[] dr = dt.Select("pid ='" + tn.Tag.ToString() + "'");
            if (dr.Length > 0)
            {
                foreach (DataRow dr1 in dr)
                {
                    TreeNode tnc = new TreeNode();
                    tnc.Text = dr1[Text].ToString();
                    tnc.Tag = dr1[id];
                    AddChild(tnc, dt, id, text, pid);
                }
            }
        }



        private DataTable GetDatatable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("id", typeof(string));
            dt.Columns.Add("text", typeof(string));
            dt.Columns.Add("pid", typeof(string));
            DataRow row1;
            row1 = dt.NewRow();
            row1[0] = "A";
            row1[1] = "A";
            row1[2] = DBNull.Value;
            dt.Rows.Add(row1);

            row1 = dt.NewRow();
            row1[0] = "A1";
            row1[1] = "A1";
            row1[2] = "A";
            dt.Rows.Add(row1);

            row1 = dt.NewRow();
            row1[0] = "A11";
            row1[1] = "A11";
            row1[2] = "A1";
            dt.Rows.Add(row1);

            row1 = dt.NewRow();
            row1[0] = "B";
            row1[1] = "B";
            row1[2] = DBNull.Value;
            dt.Rows.Add(row1);

            row1 = dt.NewRow();
            row1[0] = "B1";
            row1[1] = "B1";
            row1[2] = "B";
            dt.Rows.Add(row1);

            row1 = dt.NewRow();
            row1[0] = "B11";
            row1[1] = "B11";
            row1[2] = "B1";
            dt.Rows.Add(row1);
            return dt;
        }

        private void button1_Click(object sender, EventArgs e)


        {
            AddNodes(GetDatatable(), "id", "text", "pid");
        }
    }
}

[解决办法]
首先指出DBNull.Value并不等价于String.Empty 所以你的第一个dt.Select是获取不到任何行的 所以你的TreeView上什么都没有 把你pid那一行的值改成空字符串 ""  这样

其次 你的递归太混乱了 你真要用递归的话 就把AddNodes和AddChild整合成一个递归 否则很容易出现无限循环递归的问题

热点排行