2 greenlab greenlab 于 2015.06.12 08:37 提问

【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个回答

CJY8023
CJY8023   2015.06.23 15:35

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

Csdn user default icon
上传中...
上传图片
插入图片