Page_Load中:
{
DataSet ds=Get_Datasource();//得到数据源(DataSet)
intiTree(TreeView1.Nodes,0);
}private void intiTree(Microsoft.Web.UI.WebControls.TreeNodeCollection Nods,int ParentID)
{
Microsoft.Web.UI.WebControls.TreeNode nod;
int intid;
DataView dv=new DataView();
dv.Table=ds.Tables[0]; dv.RowFilter= "ID1 = " + ParentID;
foreach(DataRowView drv in dv)
{
nod=new Microsoft.Web.UI.WebControls.TreeNode();
nod.Text=drv["name"].ToString();
nod.ID=drv["id"].ToString();
intid=Convert.ToInt32(drv["ID1"]);
Nods.Add(nod);
intiTree(Nods[Nods.Count - 1].Nodes, intid);
}
}数据表:ID ID号
ID1 父节点
name 名字
为什么运行程序,什么都没有?但是DataSet肯定得到数据表了.解决后马上给分!
{
DataSet ds=Get_Datasource();//得到数据源(DataSet)
intiTree(TreeView1.Nodes,0);
}private void intiTree(Microsoft.Web.UI.WebControls.TreeNodeCollection Nods,int ParentID)
{
Microsoft.Web.UI.WebControls.TreeNode nod;
int intid;
DataView dv=new DataView();
dv.Table=ds.Tables[0]; dv.RowFilter= "ID1 = " + ParentID;
foreach(DataRowView drv in dv)
{
nod=new Microsoft.Web.UI.WebControls.TreeNode();
nod.Text=drv["name"].ToString();
nod.ID=drv["id"].ToString();
intid=Convert.ToInt32(drv["ID1"]);
Nods.Add(nod);
intiTree(Nods[Nods.Count - 1].Nodes, intid);
}
}数据表:ID ID号
ID1 父节点
name 名字
为什么运行程序,什么都没有?但是DataSet肯定得到数据表了.解决后马上给分!
解决方案 »
- asp.net如何获取本机所有TCP连接
- 怎样在后台代码中显示隐藏层
- 在vs2005中怎样在Global.asax中导入命名空间
- 即刻散分:aspx如何使用winform当中的RichTextBox
- 图片问题,网站需要保存图片的时候大家是怎么做的啊.
- 再次求助关于flv视频播放的问题请高手一定来解答一下
- xml增样增加修改删除节点.由于时间急,所有边搜索,也希望大家帮下忙 :)
- 高手请进:如何用 gdi+ 实现winform任务管理器中的cpu占有率图或者内存使用率图,超难得问题,多谢了
- 基于OOXML (Office Open XML)的复杂Excel文件在线输出1(动态复制表单)
- 问问啊,多少分一个裤衩变成两个?多少分两个变成三个?俺开始努力了
- 跳转页面的返回时间
- 奇怪的问题,有待解决
http://msdn.microsoft.com/downloads/samples/internet/ASP_DOT_NET_ServerControls/WebControls/default.asp
下载后是后缀为bat的版本
(1)bulid.将bulid.bat的路径指向csc.exe所在路径,生成Microsoft.Web.UI.WebControls.dll。
(2)在wwwroot下创建空目录webctrl_client\1_0。
(3)将build\Runtime下的文件拷至webctrl_client\1_0下。
(4)选择工具箱的自定义工具箱,添加Microsoft.Web.UI.WebControls.dll。
有些麻烦
但如果你能找到后缀是msi的自动安装版本,直接下一步就行(我一直用这个版本,hoho)
安装后,通过“自定义工具箱”->“.net框架组件”把TreeView添加到工具箱里2.运行时无法显示
一般是TreeView的版本问题,最好下载英文版自动安装版本重新安装,安装前应该先到添加删除程序里卸掉原版本3.显示格式出错(非树状显示)
TreeView要求客户端浏览器版本为IE5.5及以上,最好要求客户端升级为IE6.04.框架里使用TreeView
设置NavigateUrl、Target属性,可更新另外的Frame5.找不到TreeNode类
使用TreeView,最好添加namespace:using Microsoft.Web.UI.WebControls;6.遍历TreeView节点(递归算法)
private void Page_Load(object sender, System.EventArgs e)
{
GetAllNodeText(TreeView1.Nodes);
}
void GetAllNodeText(TreeNodeCollection tnc)
{
foreach(TreeNode node in tnc)
{
if(node.Nodes.Count!=0)
GetAllNodeText(node.Nodes);
Response.Write(node.Text + " ");
}
}7.得到node结点的父节点
TreeNode pnode;
if(node.Parent is TreeNode)
pnode=(TreeNode)node.Parent;
else
//node is root node8.修改TreeView样式(示例)
<iewc:TreeView id="TreeView1" runat="server" HoverStyle="color:blue;background:#00ffCC;" DefaultStyle="background:red;color:yellow;" SelectedStyle="color:red;background:#00ff00;">
用代码:
TreeView1.DefaultStyle["font-size"] = "20pt";9.展开时不提交,改变选择节点时才提交
将autopostback设置成false;
在body里添加 <body onload="initTree()">
然后在PageLoad里写:
string strTreeName = "TreeView1";
string strRef = Page.GetPostBackEventReference(TreeView1);
string strScript = "<script language=\"JavaScript\"> \n" + "<!-- \n" + " function initTree() { \n" +" " + strTreeName + ".onSelectedIndexChange = function() { \n" + "if (event.oldTreeNodeIndex !=
event.newTreeNodeIndex) \n" + "this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex + ',' + event.newTreeNodeIndex); \n" + "window.setTimeout('" + strRef.Replace("'","file://'/") + "', 0, 'JavaScript'); \n" + " } \n" + " } \n" + "// --> \n" + "</script>";
Page.RegisterClientScriptBlock("InitTree",strScript );
这样就只有你点击的节点更改的时候才提交!10.TreeView结合XML
把XML文件设置为如下格式,然后直接设置TreeNodeSrc为该XML文件就行
<?xml version="1.0" encoding="GB2312"?>
<TREENODES>
<TREENODE TEXT="node0" EXPANDED="true">
<TREENODE TEXT="node1"/>
<TREENODE TEXT="node2"/>
</TREENODE>
<TREENODE TEXT="node3" NavigateURL="3.aspx"/>
</TREENODES>
或者用代码
TreeView1.TreeNodeSrc="a.xml";
TreeView1.DataBind(); 客户端控制TreeView
http://expert.csdn.net/Expert/topic/1382/1382892.xml1.设置所选节点,如选中第二个节点
function SetSelNode()
{
TreeView1.selectedNodeIndex="1";
}2.得到所选节点的Text,ID或NodeData
function GetAttribute()
{
alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text"));
}
替换Text为ID或NodeData,可分别得到所选节点的ID或NodeData3.修改节点属性,如修改第一个节点的Text
function ModifyNode()
{
var node=TreeView1.getTreeNode("0");
node.setAttribute("Text","hgknight");
}4.得到点击节点
function TreeView1.onclick()
{
alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("Text"));
}5.添加节点
function AddNode()
{
var node=TreeView1.createTreeNode();
node.setAttribute("Text","hgknight");
TreeView1.add(node);
}6.js遍历所有节点
var AllRootNode=new Array();
AllRootNode=TreeView1.getChildren();
AlertNode(AllRootNode); function AlertNode(NodeArray)
{
if(parseInt(NodeArray.length)==0)
return;
else
{
for(i=0;i<NodeArray.length;i++)
{
var cNode;
cNode=NodeArray[i];
alert(cNode.getAttribute("Text"));
if(parseInt(cNode.getChildren().length)!=0)
AlertNode(cNode.getChildren());
}
}
}
{
bool boolIntCharSign = false;
bool boolHaveBadChar = false; if(strRowFilter.IndexOf("'") > 0)
{
boolIntCharSign = true;
} DataSet ds = dsShowData; //读取数据 DataView dv = new DataView();
TreeNode tmpNd;
dv.Table = ds.Tables[0];
dv.RowFilter = strRowFilter;
string strParentName = strRowFilter.Remove(strRowFilter.IndexOf("="),strRowFilter.Substring(strRowFilter.IndexOf("=")).Length); foreach(DataRowView drv in dv)
{
tmpNd = new TreeNode();
tmpNd.ID = drv[strIDValue].ToString();
tmpNd.Text = drv[strTextValue].ToString();
tmpNd.ImageUrl = @"..\images\TreeImg\treeFold.gif";
tmpNd.ExpandedImageUrl = @"..\images\TreeImg\treeFold_open.gif";
tnd.Add(tmpNd); //添加节点 //检验字符 是否允许转化
if(boolIntCharSign)
{
string chrBadChar = ",.;:'?/-_+=\\|@#$%&*()!~`abcdefghijklmnopqrstuvwxyz";
string newStr = drv[strIDValue].ToString().ToLower(); for(int i=0;i<chrBadChar.Length;i++)
{
if(newStr.IndexOf(chrBadChar.Substring(i,1)) >= 0)
{
boolHaveBadChar = true;
}
}
} if(!boolHaveBadChar)
{
if(Convert.ToInt64(drv[strIDValue]) == 0) //防止死递归
break;
}
//END if(boolIntCharSign)
InitTree(tmpNd.Nodes,dsShowData,strIDValue,strTextValue,strParentName + "='" + tmpNd.ID + "'"); //递归调用
else
InitTree(tmpNd.Nodes,dsShowData,strIDValue,strTextValue,strParentName + "=" + tmpNd.ID); //递归调用
}
}自己慢慢去看吧
没有获取到上面的DataSet
private static void InitTree(TreeNodeCollection tnd,DataSet dsShowData,string strIDValue,string strTextValue)
{
TreeNode tmpNd;
for (int i=0;i<dsShowData.Tables[0].Rows.Count;i++)
{
tmpNd=new TreeNode();
tmpNd.ID=dsShowData.Tables[0].Rows[i][strIDValue].ToString();
tmpNd.Text=dsShowData.Tables[0].Rows[i][strTextValue].ToString();
tmpNd.ImageUrl=@"..\images\TreeImg\treeFold.gif";
tnd.Add(tmpNd); //添加节点
}
}
感谢,我的ds为本页全局变量,上面少写了一行to sportdog(会编程的流氓狗)
感谢,在同一个页面,我用了别一种方法,则可以成功!所以Treeview 肯定装对了
DataView dv=new DataView();
dv.Table=ds.Tables[0];
2个ds 不是一个你可以把ds设为共享型变量
先感谢,你的方法,只能得到一列,不能分层。
我用别的方法已经成功实现,只是不明白,我提问的有什么不对! goody9807() ( )
先感谢,我是已经把DataSet ds 定本页全局变量,只是上面少贴了一行
我在page_load中读取了DataSet给了ds.
检查方法:在WWWROOT下面看是否有webctrl_client文件夹,里面包含TREEVIEW的图片。如果没有。是显示不出来树的。
其次,数据库,代码设计
最后,在PAGELOAD里调用
if(!ispostback)(必须的)
{
}
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.Web.UI.WebControls;
using System.Data.SqlClient;
namespace TreeCS
{
///
/// WebForm1 的摘要说明
///
public class WebForm1 : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
private void Page_Load(object sender, System.EventArgs e)
{
// 定义数据库连接
SqlConnection CN = new SqlConnection();
try
{
//初始化连接字符串
CN.ConnectionString=
"data source=pmserver;initial catalog=Bench;persist security info=False;user id=sa;Password=sa;";
CN.Open(); SqlDataAdapter adp = new SqlDataAdapter("select * from tbTree",CN);
DataSet ds=new DataSet();
adp.Fill(ds);
this.ViewState["ds"]=ds;
}
catch (Exception ex)
{
Session["Error"] = ex.ToString();
Response.Redirect("error.aspx"); //̀跳转程序的公共错误处理页面
}
finally
{
CN.Close();
}
//调用递归函数,完成树形结构的生成
AddTree(0, (TreeNode)null);
} //递归添加树的节点
public void AddTree(int ParentID,TreeNode pNode)
{
DataSet ds=(DataSet) this.ViewState["ds"];
DataView dvTree = new DataView(ds.Tables[0]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[PARENTID] = " + ParentID; foreach(DataRowView Row in dvTree)
{
TreeNode Node=new TreeNode() ;
if(pNode == null)
{ //添加根节点
Node.Text = Row["ConText"].ToString();
TreeView1.Nodes.Add(Node);
Node.Expanded=true;
AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归
}
else
{ //̀添加当前节点的子节点
Node.Text = Row["ConText"].ToString();
pNode.Nodes.Add(Node);
Node.Expanded = true;
AddTree(Int32.Parse(Row["ID"].ToString()),Node); //再次递归
}
}
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
///设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}
列名 数据类型 描述 长度 主键
ID Int 节点编号 4 是
ParentID Int 父节点编号 4
ConText Nvarchar 我们要显示的节点内容 50 在SQL SERVER 2000中建表的脚本:
CREATE TABLE [dbo].[tbTree] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Context] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[ParentID] [int] NULL
) ON [PRIMARY]在表中添加如下记录:
SET IDENTITY_INSERT tbtree ON
insert tbtree (ID,Context,ParentID) values ( 1,'中国',0)
insert tbtree (ID,Context,ParentID) values ( 2,'北京',11)
insert tbtree (ID,Context,ParentID) values ( 3,'天津',11)
insert tbtree (ID,Context,ParentID) values ( 4,'河北省',1)
insert tbtree (ID,Context,ParentID) values ( 5,'广东省',1)
insert tbtree (ID,Context,ParentID) values ( 6,'广州',5)
insert tbtree (ID,Context,ParentID) values ( 7,'四川省',1)
insert tbtree (ID,Context,ParentID) values ( 8,'成都',7)
insert tbtree (ID,Context,ParentID) values ( 9,'深圳',5)
insert tbtree (ID,Context,ParentID) values ( 10,'石家庄',4)
insert tbtree (ID,Context,ParentID) values ( 11,'辽宁省',1)
insert tbtree (ID,Context,ParentID) values ( 12,'大连',11)
insert tbtree (ID,Context,ParentID) values ( 13,'上海',1)
insert tbtree (ID,Context,ParentID) values ( 14,'天河软件园',6)
insert tbtree (ID,Context,ParentID) values ( 15,'汕头',5)
SET IDENTITY_INSERT tbtree off