greenlab 2015-06-12 00:37 采纳率: 0%
浏览 1620

【winform C#】我这个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);
            }
        }
    }
}

最后只能生产根节点,这是怎么回事?应该怎么改?求大神指教
谢谢!
图片说明

  • 写回答

1条回答 默认 最新

  • 白银之手o 2015-06-23 07:35
    关注

    //递归绑定子区域
    private void BindChildAreas(TreeNode fNode)
    {
    DataRow dr = (DataRow)fNode.Tag;//父节点数据关联的数据行
    int fAreaId = (int)dr["id"]; //父节点ID
    DataRow[] rows = dt.Select("fAreaId=" + fAreaId);//子区域
    你绑定子区域的时候,传的是父节点的ID

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器