treeview中节点url转向的问题 现有数据库列名id记录treeview中各节点值(此值唯一),有一页面message.aspx,我现在要实现的是点击treeview中节点,url转向为"message.aspx?id="+id,请问要实现这个功能我要怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 生成 TreeNode.NavigateUrl的时候生成为TreeNode.NavigateUrl="message.aspx?id="+id; 您好,我在后台代码里添加 TreeNode.NavigateUrl="message.aspx?id="+id;这句的时候出现了以下错误,好象TreeNode没有NavigateUrl属性CS0120: 非静态的字段、方法或属性“System.Web.UI.WebControls.TreeNode.NavigateUrl.get”要求对象引用 System.Web.UI.WebControls.TreeNode a = new System.Web.UI.WebControls.TreeNode();a.NavigateUrl="message.aspx?id="+id;root.ChildNodes.Add(a); http://msdn2.microsoft.com/zh-cn/06bed2tx(VS.80).aspx 还是没有解决,我当前的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> net_lover(【孟子E章】) ( )偶像,他是那里人啊 root.ChildNodes.Add(a);改为 TreeView1.Nodes.Add(a);或者再加一句:TreeView1.Nodes.Add(root)试一试 在你初始化这颗树的时候就把 ID的值邦定在Node的NavigateUrl属性上就是NavigateUrl = "message.aspx?Node=" + ID;问题是你的treeview到底有没有节点阿 我是通过一个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; } } }} 有可能是在这个文件里改,前面的javascript里的内容不用写 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上的 childRead.GetString(1)+"Node="+childRead.GetInt32(0)这样就好了,谢谢柔石兄了!问题已解决 163网易跟帖盖楼的数据库设计以及前台盖楼页面的JS实现原理?谢谢 有关全局变量的问题 谁能给我一个在asp.net中用rss做的项目或是参考网址 如何在Master Page中打开新页? 截取字符串问题 关于PetShop连接字符串问题? 我按照帮助中的例子 作了一个asp。net 服务器空件 然后在asp。net页中调用 出现如下错误,请大家帮忙 各位大侠帮我看看怎么不能连接数据库啊??? 统计表中记录数应该怎么做 如何能够达到这样? LinkButton打开一个新的窗口后css实效问题! 如何向现有的DataTable中添加一行?
TreeNode.NavigateUrl="message.aspx?id="+id;
CS0120: 非静态的字段、方法或属性“System.Web.UI.WebControls.TreeNode.NavigateUrl.get”要求对象引用
a.NavigateUrl="message.aspx?id="+id;
root.ChildNodes.Add(a);
<%@ 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>
改为 TreeView1.Nodes.Add(a);
或者再加一句:TreeView1.Nodes.Add(root)试一试
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;
}
}
}
}
这样就好了,谢谢柔石兄了!
问题已解决