c# winform结合数据库动态生成treeview的父节点和子节点方法和思路

tb_food表的结构如图一:

 

 

tb_foodtype表的结构如图二:

 

 

 

 

//获取tb_foodtype表中的所有数据
private void InitDataTable()
{
  SqlConnection conn = BaseClass.DBConn.CyCon();
  SqlCommand cmd = new SqlCommand("select * from tb_foodtype", conn);
  SqlDataAdapter ada = new SqlDataAdapter(cmd);
  dt = new DataTable();
  ada.Fill(dt);
}

//获取tb_food表中的所有数据

private void InitDataTable1()
{
  SqlConnection conn = BaseClass.DBConn.CyCon();
  SqlCommand cmd = new SqlCommand("select * from tb_food", conn);
  SqlDataAdapter ada1 = new SqlDataAdapter(cmd);
   dt1 = new DataTable();
  ada1.Fill(dt1);
}

//添加父节点的方法
private void BindRoot()
{
   DataRow[] rows = dt.Select();//取根
  foreach (DataRow dRow in rows)
   {
    TreeNode rootNode = new TreeNode();
    rootNode.Tag = dRow;
    rootNode.Text = dRow["foodtype"].ToString();
    控件名.Nodes.Add(rootNode);
    BindChildAreas(rootNode);//调用添加子节点的方法
   }
}

//添加子节点的方法
//递归绑定子区域
private void BindChildAreas(TreeNode fNode)
 {
  DataRow dr = (DataRow)fNode.Tag;//父节点数据关联的数据行
   int fAreaId = (int)dr["ID"]; //父节点ID
   DataRow[] rows1 = dt1.Select("foodty ="+fAreaId);//子区域
  if (rows1.Length == 0) //递归终止,区域不包含子区域时
  {
    return;
  }
  foreach (DataRow dRow in rows1)
  {
    TreeNode node = new TreeNode();
    node.Tag = dRow;
    node.Text = dRow["foodname"].ToString();
    //添加子节点
    fNode.Nodes.Add(node);
  }    
}

 

posted @ 2019-05-29 11:00  清风鸣蝉  阅读(1637)  评论(0编辑  收藏  举报