greenlab 发表于 2015-6-12 08:40:14

【winform】我这个treeview为什么只能从数据库调用根节点?

数据库表如下

这是代码:
Namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

            private DataTable dt = null;

            public Form1()
            {
                InitializeComponent();
                InitDataTable();

            }

            //获取Area所用数据
            private void InitDataTable()
            {
                SqlConnection conn = new SqlConnection("Data source=(local);Initial Catalog=TreeViewTest;User ID=sa;Pwd=ABCabc01");
                SqlCommand cmd = new SqlCommand("SELECT * FROM Area", conn);
                SqlDataAdapter ada = new SqlDataAdapter(cmd);
                dt = new DataTable();
                ada.Fill(dt);
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                BindRoot();
            }

            //绑定根节点
            private void BindRoot()
            {
                DataRow[] rows = dt.Select("fAreaId=-1");//取根
                foreach (DataRow dRow in rows)
                {
                  TreeNode rootNode = new TreeNode();
                  rootNode.Tag = dRow;
                  rootNode.Text = dRow["AreaName"].ToString();
                  treeView1.Nodes.Add(rootNode);

                  BindChildAreas(rootNode);
                }

            }

            //递归绑定子区域
            private void BindChildAreas(TreeNode fNode)
            {
                DataRow dr = (DataRow)fNode.Tag;//父节点数据关联的数据行
                int fAreaId = (int)dr["id"]; //父节点ID
                DataRow[] rows = dt.Select("fAreaId=" + fAreaId);//子区域
                if (rows.Length == 0)//递归终止,区域不包含子区域时
                {
                  return;
                }

                foreach (DataRow dRow in rows)
                {
                  TreeNode node = new TreeNode();
                  node.Tag = dRow;
                  node.Text = dRow["AreaName"].ToString();

                  //添加子节点
                  fNode.Nodes.Add(node);
                  //递归
                  BindChildAreas(node);
                }
            }
      }
    }

运行后只能生成根节点,下面的子节点为什么都不见了?改怎么改才好?
谢谢!


猫猫咬了我的蛋 发表于 2015-6-12 18:06:03

DataRow dr = (DataRow)fNode.Tag;//父节点数据关联的数据行
这里有问题
会出现转化无效的错误
页: [1]
查看完整版本: 【winform】我这个treeview为什么只能从数据库调用根节点?