日期:2014-05-18  浏览次数:20472 次

TreeView 中的问题(转贴)
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




------解决方案--------------------
中心思想:
在CS代码中为每一个节点设置 NavigateUrl 属性

方法,在为 TreeView 添加节点之前先判断要添加的节点是子节点还是父节点,是子节点的话我们就添加NavigateUrl属性,如果是父节点的话,我们就不添加NavigateUrl属性。

------解决方案--------------------
如果你的程序是CS的,可以直接使用TreeNode.GetNodeCount方法,如果TreeNode.GetNodeCount > 0 ,说明有子节点,直接添加NavigateUrl属性。

如果你的程序是Web的,就只能在数据绑定到TreView以后,判断this.treeView1.SelectedNode.Nodes.Count了。“SelectedNode”可以替换成你遍历中每一个节点。

如果你的程序是WEB的,而且你也会用Ajax,那就在load的时候只判断第一级次的所有节点是否有子节点,展开页面的同时,判断即将展开的那一级次的所有节点是否有子节点。
------解决方案--------------------
1,2楼说的比较全了.
jf