我在母版页里定义了TreeView的changed方法,里边是跳转,新建页引用后,每次点击TreeView的节点后,页面跳转到另一页,TreeView又重新初始化了一次,我想让TreeView记录当先选择的节点,而下次加载之后,保存原来的样子,如果,很难,那么,就简单点,如何获取当前点击的节点呢?

解决方案 »

  1.   

    如果把treeview当做导航页回不回好一点呢?点击上面的节点的时候,在其他页面刷新,一定要每次都重新加载吗?
      

  2.   

     protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
    {
    if (this.TreeView1.SelectedNode != null)
    {
      string s= this.TreeView1.SelectedNode.Value.Trim();
    }
    }
    NavigateUrl = "javascript:test("+节点.Value+")";function test(str)
    {
    document.getElementById("txt").value=str;
    } <asp:TreeView ID="TreeView1" runat="server" onclick="javascript:client_OnTreeNodeChecked();" NodeIndent="10" ShowCheckBoxes="All" ShowLines="True">  
    function checkParent (obj)  
      {  
      while(obj != null)  
      {  
    }
    }
      

  3.   

    你可以为 treeview 上的某个节点传一个值,在客户端或者服务器端获取这个节点的值就可以
      

  4.   


    实现左边TreeView结构,右边动态变动,可以么!
      

  5.   

    我刚好也在做这个,已经做出来了,而且是数据库提取的,我给你粘一下:
    <asp:TreeView ID="trv_menu" runat="server" Font-Bold="False" Font-Size="12px" Width="150px"
                        OnSelectedNodeChanged="trv_menu_SelectedNodeChanged" ShowLines="True" AutoGenerateDataBindings="False">
                        <ParentNodeStyle Font-Bold="False" />
                        <HoverNodeStyle Font-Underline="True" ForeColor="Purple" />
                        <SelectedNodeStyle Font-Underline="True" HorizontalPadding="0px" VerticalPadding="0px" />
                        <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="DarkBlue" HorizontalPadding="5px"
                            NodeSpacing="0px" VerticalPadding="0px" />
                    </asp:TreeView>
    <asp:Label ID="lbl_nodeText" runat="server" Text="Label" Visible="false"></asp:Label>
                    <asp:Label ID="lbl_nodeValue" runat="server" Font-Size="12px" Visible="false"></asp:Label>
    C#代码:
    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //查找根结点的子节点
                bindtree("0");//传入第0个SJBMBH开始遍历根节点        }
        }
        /// <summary>
        /// 递归遍历指定节点下的子节点
        /// </summary>
        /// <param name="nd">参数,接收节点对象</param>
        private void bindnode(TreeNode nd)
        {
            DataSet ds = rygl.Getdata(nd.Value);
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                TreeNode node = new TreeNode();
                node.Text = ds.Tables[0].Rows[i]["BMMC"].ToString();
                node.Value = ds.Tables[0].Rows[i]["BMBH"].ToString();            nd.ChildNodes.Add(node);//把指定节点添加到控件中            bindnode(node);
            }
        }
        /// <summary>
        /// 查找根节点(parent_ID为0的节点)的子节点
        /// </summary>
        /// <param name="parent_ID">参数,接收根节点ID</param>
        private void bindtree(string SJBMBH)
        {
            DataSet ds = rygl.Getdata(SJBMBH);
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    //这是在找数据库中的节点
                    TreeNode node = new TreeNode(ds.Tables[0].Rows[i]["BMMC"].ToString(), ds.Tables[0].Rows[i]["BMBH"].ToString());
                    this.trv_menu.Nodes.Add(node);//把指定节点添加到控件中                bindnode(node);
                }
            }    } protected void trv_menu_SelectedNodeChanged(object sender, EventArgs e)
        {
            string str_nodeText = this.trv_menu.SelectedNode.Text;
            string str_nodeValue = this.trv_menu.SelectedNode.Value;
            this.lbl_nodeText.Text = str_nodeText;
            this.lbl_nodeValue.Text = str_nodeValue;
        }
      

  6.   

    我用的是三层的,里面用一个rygl.Getdata,那里的代码是:
    public DataSet Getdata(string SJBMBH)
            {
                using (SqlserverHelper helper = new SqlserverHelper())
                {
                    StringBuilder strSql = new StringBuilder();
                    strSql.Append("select * from XT_BMB where SJBMBH=@SJBMBH and SFSY=@SFSY");
                    SqlParameter[] parameters ={
                                                 new SqlParameter("@SJBMBH",SqlDbType.Int),
                                                 new SqlParameter("@SFSY",SqlDbType.Int)
                                               };
                    parameters[0].Value = SJBMBH;
                    parameters[1].Value = 1;
                    DataSet ds = new DataSet();
                    ds = helper.ExecuteDataSet(strSql.ToString(), parameters);
                    return ds;
                }
            }
    这个你自己改成自己的就可以了。
    数据库中数据表的结构是这样的:
    USE [glsgqy]
    GO
    /****** 对象:  Table [dbo].[XT_BMB]    脚本日期: 08/04/2010 10:11:24 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[XT_BMB](
    [SJBMBH] [int] NULL,
    [BMBH] [int] IDENTITY(1,1) NOT NULL,
    [BMMC] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
    [SFSY] [int] NULL,
    [BGS] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,
    [DH] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,
    [YJ] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,
    [CZ] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,
    [DJRQ] [datetime] NULL,
    [BZ] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
    [BMFZR] [nvarchar](6) COLLATE Chinese_PRC_CI_AS NULL,
     CONSTRAINT [PK_XT_BMB] PRIMARY KEY CLUSTERED 
    (
    [BMBH] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]GO
    SET ANSI_PADDING OFF
    我的数据库叫做glsgqy,数据表叫做XT_BMB,好了,现在是非常完善了