private void CreateTree(int belong, Microsoft.Web.UI.WebControls.TreeNode rootnode)
{
DataSet ds = new DataSet();
OleDbConnection conn=(new Data.DbAccess()).DbConn();
OleDbDataAdapter oda=new OleDbDataAdapter("select * from gaoxinqi where ParentNode="+belong,conn);
oda.Fill(ds);
foreach(DataRow dr in ds.Tables[0].Rows)
{
Microsoft.Web.UI.WebControls.TreeNode treenode = new Microsoft.Web.UI.WebControls.TreeNode();
treenode.Text = dr["NodeName"].ToString().Trim();
treenode.Expanded = true;
treenode.NavigateUrl="Display.aspx?uid="+dr["Id"].ToString();
treenode.Target="main";
rootnode.Nodes.Add(treenode);
int id = int.Parse(dr["Id"].ToString().Trim());
CreateTree(id, treenode);
}
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Microsoft.Web.UI.WebControls.TreeNode rootnode = new Microsoft.Web.UI.WebControls.TreeNode();
rootnode.Expanded = true;
rootnode.Text="公司信息";
rootnode.NavigateUrl="Display.aspx?uid=0";
rootnode.Target="main";
TreeView1.Nodes.Add(rootnode);
CreateTree(0, rootnode);
}
怎么样实现当有下一级结点时,单击它时它展开,不链接。当没有下一级结点时就链接。
数据库结构是这样的(简化)
Id   NodeName ParentNode
1    董事办     0
2    总经办     0
3    制造部     0
4    工程部     3
5    SMT        3

解决方案 »

  1.   

    中心思想:
    在CS代码中为每一个节点设置 NavigateUrl 属性方法,在为 TreeView 添加节点之前先判断要添加的节点是子节点还是父节点,是子节点的话我们就添加NavigateUrl属性,如果是父节点的话,我们就不添加NavigateUrl属性。
      

  2.   

    如果你的程序是CS的,可以直接使用TreeNode.GetNodeCount方法,如果TreeNode.GetNodeCount > 0 ,说明有子节点,直接添加NavigateUrl属性。如果你的程序是Web的,就只能在数据绑定到TreView以后,判断this.treeView1.SelectedNode.Nodes.Count了。“SelectedNode”可以替换成你遍历中每一个节点。如果你的程序是WEB的,而且你也会用Ajax,那就在load的时候只判断第一级次的所有节点是否有子节点,展开页面的同时,判断即将展开的那一级次的所有节点是否有子节点。
      

  3.   

    怎么TreeView 里没有SelectedNode 属性呢?