现有数据库列名id记录treeview中各节点值(此值唯一),有一页面message.aspx,我现在要实现的是点击treeview中节点,url转向为"message.aspx?id="+id,请问要实现这个功能我要怎么做?

解决方案 »

  1.   

    生成 TreeNode.NavigateUrl的时候生成为
    TreeNode.NavigateUrl="message.aspx?id="+id;
      

  2.   

    您好,我在后台代码里添加 TreeNode.NavigateUrl="message.aspx?id="+id;这句的时候出现了以下错误,好象TreeNode没有NavigateUrl属性
    CS0120: 非静态的字段、方法或属性“System.Web.UI.WebControls.TreeNode.NavigateUrl.get”要求对象引用
      

  3.   

    System.Web.UI.WebControls.TreeNode a = new System.Web.UI.WebControls.TreeNode();
    a.NavigateUrl="message.aspx?id="+id;
    root.ChildNodes.Add(a);
      

  4.   

    http://msdn2.microsoft.com/zh-cn/06bed2tx(VS.80).aspx
      

  5.   

    还是没有解决,我当前的aspx文件是这样的,不知道哪里有问题
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
    void  TreeNode ()
    {
        int Node;
        System.Data.SqlClient.SqlConnection con = DB.con();
        System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
        cmd.Connection = con;
        con.Open();
        cmd.CommandText = "select * from sitemap " ;
        System.Data.SqlClient.SqlDataReader sdr = cmd.ExecuteReader();
        sdr.Read();
        Node = sdr.GetInt32(0);
        System.Web.UI.WebControls.TreeNode a = new System.Web.UI.WebControls.TreeNode();
        a.NavigateUrl = "message.aspx?Node=" + Node;
        TreeNode root = new TreeNode();
        root.ChildNodes.Add(a);
        sdr.Close();
        con.Close();
    }
    </script><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1">
                
            </asp:TreeView>
            <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />    </form>
    </body>
    </html>
      

  6.   

    net_lover(【孟子E章】) ( )偶像,他是那里人啊
      

  7.   

    root.ChildNodes.Add(a);
    改为 TreeView1.Nodes.Add(a);
    或者再加一句:TreeView1.Nodes.Add(root)试一试
      

  8.   

    在你初始化这颗树的时候就把 ID的值邦定在Node的NavigateUrl属性上就是NavigateUrl = "message.aspx?Node=" + ID;问题是你的treeview到底有没有节点阿
      

  9.   

    我是通过一个cs文件使treeview和数据库连接的,这个文件如下,有可以和这个有关
    namespace Samples.AspNet.CS.Controls
    {
        using System;
        using System.Data;
        using System.Configuration;
        using System.Web;
        using System.Web.Security;
        using System.Web.UI;
        using System.Web.UI.WebControls;
        using System.Web.UI.WebControls.WebParts;
        using System.Web.UI.HtmlControls;
        //引入需要的命名空间
        using System.Data.SqlClient;
        using System.Collections.Specialized;
        using System.Collections;
        using System.Security.Permissions;    /**/
        /// <summary>
        /// sqlsitemap 的摘要说明
        /// </summary>
        [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
        //权限说明
        public class sqlsitemap : StaticSiteMapProvider
        {
            private SiteMapNode SMNode = null;
            private SiteMapNode rootNode = null;
            private SqlConnection conn = null;
            private string ConnString = "smcstring";
            //申明 节点,数据库连接,连接字符串三个变量
            public sqlsitemap()
            {        }
            private bool initialized = false;
            public virtual bool IsInitialized
            {//重写基类IsInitialized属性,在调用基类 Initialize 之后在该方法中执行自己的初始化
                get
                { return initialized; }
            }
            protected override SiteMapNode GetRootNodeCore()
            {//重写基类GetRootNodeCore方法,使之返回RootNode这个属性
                return BuildSiteMap();
            }
            public override void Initialize(string name, NameValueCollection attributes)
            {//重写基类Initialize方法,初始化数据连接,如果成功,那么将initialized设置为true
                if (IsInitialized)
                {
                    return;
                }
                base.Initialize(name, attributes);
                //调用基类Initialize方法来初始化
                string SqlConnString = attributes[ConnString];
                if (SqlConnString == null)
                {//看数据库连接是否存在
                    throw new Exception("数据连接不存在");
                }
                else
                {//初始化连接
                    conn = new SqlConnection(SqlConnString);
                }
                initialized = true;
            }
            protected override void Clear()
            {
                lock (this)
                {
                    if (rootNode == null)
                        base.Clear();
                }
            }
            public override SiteMapNode BuildSiteMap()
            {
                lock (this)
                {//锁定
                    if (!IsInitialized)
                    {//判断是否初始化了
                        throw new Exception("数据未初始化");
                    }
                    else
                    {
                        if (rootNode == null)
                        {
                            Clear();                        int rootNodeId = -1;
                            if (conn.State == ConnectionState.Closed)
                            {//如果当前连接是关闭的,就打开它 
                                conn.Open();
                            }
                            //循环
                            SqlCommand cmd = new SqlCommand("select rid,url,title,disp from rootsitemap where rn=0", conn);
                            SqlDataReader sdr = cmd.ExecuteReader();
                            if (sdr.HasRows)
                            {
                                sdr.Read();
                                SMNode = new SiteMapNode(this, sdr.GetInt32(0).ToString(), sdr.GetString(1), sdr.GetString(2), sdr.GetString(3));
                            }
                            sdr.Close();
                            //进入ROOTNODE节点
                            SqlDataAdapter rootsda = new SqlDataAdapter("select rid,url,title,disp from rootsitemap where rn=1", conn);
                            DataSet ds = new DataSet();
                            rootsda.Fill(ds, "root");
                            DataView rdv = ds.Tables["root"].DefaultView;
                            if (rdv.Count > 0)
                            {
                                foreach (DataRowView drv in rdv)
                                {
                                    rootNodeId = Convert.ToInt32(drv["rid"]);
                                    rootNode = new SiteMapNode(this, drv["rid"].ToString(), drv["url"].ToString(), drv["title"].ToString(), drv["disp"].ToString());                                //进入子节点查询
                                    SqlCommand childcmd = new SqlCommand("select nid,url,title,disp from sitemap where node=" + rootNodeId + "", conn);                                SqlDataReader childRead = childcmd.ExecuteReader();
                                    if (childRead.HasRows)
                                    {
                                        SiteMapNode childNode = null;
                                        while (childRead.Read())
                                        {
                                            childNode = new SiteMapNode(this, childRead.GetInt32(0).ToString(), childRead.GetString(1), childRead.GetString(2), childRead.GetString(3));
                                            AddNode(childNode, rootNode);
                                        }
                                    }
                                    childRead.Close();
                                    AddNode(rootNode, SMNode);
                                }
                                conn.Close();
                            }
                            else
                            {
                                return null;
                            }
                        }
                    }
                    return SMNode;
                }
            }
        }
    }
      

  10.   

    有可能是在这个文件里改,前面的javascript里的内容不用写
      

  11.   

    childNode = new SiteMapNode(this, childRead.GetInt32(0).ToString(), childRead.GetString(1), childRead.GetString(2), childRead.GetString(3)); NavigateUrl 对应的那个东东 在处理一次就行了  具体就是 childRead.GetString(n)+"Node="+childRead.GetString(0) 就行了  试一试吧 我不知道你是用SiteMapNode的那个资源邦定到 NavigateUrl上的
      

  12.   

    childRead.GetString(1)+"Node="+childRead.GetInt32(0)
    这样就好了,谢谢柔石兄了!
    问题已解决