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