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

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮