asp.net 1.1 中treeview的问题
数据库为sql2000
字段有
dm name
1 一级目录
10 二级目录
1000 三级目录
1000000 四级目录
1000001 四级目录
11 二级目录
1100 三级目录
1100000 四级目录
1100001 四级目录
2 一级目录
20 二级目录
2000 三级目录
2000000 四级目录
2000001 四级目录
分4级目录
第一级为dm的长度为1的
第二级为dm的长度为2的
第三级为dm的长度为4的
第四级为dm的长度为7的
请问怎么用treeview生成一棵树?
请给个例子.谢谢!
[解决办法]
根据name属性,一点点把node加到树上吧。
[解决办法]
public class GetPID
{
public GetPID()
{
}
/// <summary>
/// 为了匹配 __通配符 查找相似的DM
/// </summary>
/// <param name= "strID "> </param>
/// <returns> </returns>
public static string GetPidFromString(string strID)
{
switch (strID.Length)
{
case 1:
return "_ ";
case 2:
return "__ ";
case 4:
return "___ ";
case 7:
return "____ ";
default:
return "_ ";
}
}
private static void InitTree(TreeNodeCollection Nds, string ID, ref DataSet ds)
{
DataView dv = new DataView();
TreeNode tmpNd;
string strID = " ";
dv.Table = ds.Tables[0];
strID = ID + GetPidFromString(ID);
dv.RowFilter = "dm like ' " + strID;
dv.Sort = "dm ";
foreach (DataRowView drv in dv)
{
tmpNd = new TreeNode();
tmpNd.Text = drv[ "dm "].ToString();
//....此处自己添加
//找到父节点特征
Nds.Add(tmpNd);
InitTree(tmpNd.ChildNodes, strId, ref ds);
}
}
public static void InitTree()
{
InitTree(TreeView1.Nodes, "0 ",ref Ds(就是SQL2000的那张表));
}
}
先看看吧 我没有编译 直接写的 就是那个道理 自己看看 我想应该没有啥大问题
哈哈
[解决办法]
最好设置一个parentid
那就可以用递归了加载节点了
[解决办法]
只要做成这种吗?
测试
一级目录
二级目录
三级目录
四级目录
有没有可能会是这种:
测试
一级目录
二级目录
三级目录
四级目录
三级目录
四级目录
一级目录
二级目录
三级目录
四级目录
[解决办法]
6、treeview实现两层节点没问题,扩展到无限层就出问题了?
我的那个做法还不够完善,对于节点数较少的情况可以这样做,对于节点数较多的情况
,你就不能这样做了,你应该只加载一级,当点击节点展开时,再加载它的下一级子节
点。
数据库结构如下:
表名:Table1
ParentID varchar 20:父节点
ID varchar 20:节点
Name varchar 50:名称
来来来,这里给你个例程,再给个我的网页上的TreeViwe看看,一万个子节点都没问题
。
http://dev1.eraserver.net/czc888/webform1.aspx
至于那三个图象的意义你看我的网页就知道了。分别表示一页纸(没有子节点)、一本
关闭的书(有子节点),一本打开的书(当前节点被展开)
void creat_node(string
name,Microsoft.Web.UI.WebControls.TreeNode t1,string number)
{
//定义一个新的结点
Microsoft.Web.UI.WebControls.TreeNode t2=new
Microsoft.Web.UI.WebControls.TreeNode();
t2.ID=number;
t2.Text=name;
//判断是否为根结点
TreeView1.ExpandedImageUrl= "images/Depart03.bmp ";
if(t1.ID.Trim()== "### ")
{
TreeView1.Nodes.Add(t2);
t2.ImageUrl= "images/Depart01.bmp ";
}
else
{
t1.Nodes.Add(t2);
t2.ImageUrl= "images/Depart01.bmp ";
t1.ImageUrl= "images/Depart02.bmp ";
}
//取得这个结点的所有子结点,利用递归自动生成
string mySelectQuery = "SELECT ParentID, ID,Name FROM table1
where ParentID= ' " + number + " ' ";
string MyConnString= "provider=Microsoft.Jet.OLEDB.4.0;Data
Source= "+Server.MapPath( ". ")+ "/dt/mydata.mdb ";
OleDbConnection myConnection = new
OleDbConnection(MyConnString);
OleDbCommand myCommand = new
OleDbCommand(mySelectQuery,myConnection);
myConnection.Open();
OleDbDataReader myReader;
myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
creat_node(myReader.GetString(2),t2,myReader.GetString(1));
}
myReader.Close();
myConnection.Close();
}
private void CreateProviderTreeBtn_Click(object sender,
System.EventArgs e)
{
Microsoft.Web.UI.WebControls.TreeNode t1=new
Microsoft.Web.UI.WebControls.TreeNode();
creat_node( " ",t1, "### ");
7、怎样使用TreeView???
//初始化TreeView数据
private void InitTV(int intVOrderLen)
{
SqlDataReader dr;
SqlCommand myCommand;
string strSel = "select * from bas_enterprise where
len(vieworder)= "+intVOrderLen+ " order by vieworder ";
myCommand = new SqlCommand (strSel, myConnection);
dr=myCommand.ExecuteReader();
while (dr.Read ())
{
TreeNode pNode=new TreeNode ();
pNode.Text =dr[ "EntpName "].ToString ();
pNode.ID =dr[ "ViewOrder "].ToString ();
TreeView1.Nodes .Add (pNode);
}
dr.Close ();
}
private void TreeView1_SelectedIndexChange(object sender,
Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
TreeNode NewNode=TreeView1.GetNodeFromIndex
(TreeView1.SelectedNodeIndex);
string strNodeId=NewNode.ID .ToString ();
SqlDataReader dr;
SqlCommand myCommand;
int intVOrderLen=strNodeId.Length+2;
string strSel = "select * from bas_enterprise where
len(vieworder)= "+intVOrderLen+ " and vieworder like '% "+strNodeId+ "__% '
order by vieworder ";
myCommand = new SqlCommand (strSel, myConnection);
dr=myCommand.ExecuteReader();
NewNode.Nodes .Clear();
while (dr.Read ())
{
TreeNode pNode=new TreeNode ();
pNode.Text =dr[ "EntpName "].ToString ();
pNode.ID =dr[ "ViewOrder "].ToString ();
NewNode.Nodes.Add (pNode);
}
dr.Close ();
TreeView1.ExpandLevel=1;
}
8、在treeview中如何查找一个值,并选中它?
问题:
各位,在已经建好的树中如何查找一个文本或者是treenodes的id,找到后选中它?
答案:
for(int i=0;i <TreeView1.Nodes.Count;i++)
if(TreeView1.Nodes[i]==TextBox1.Text)
{
string index1=TreeView1.Nodes[i].GetNodeIndex();//取得index
TreeView1.SelectedNodeIndex=index1;
}
9、如何取得TreeView中各项的值??
private void TreeView1_SelectedIndexChange(object sender,
Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
Microsoft.Web.UI.WebControls.TreeNode
NewNode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);
Label1.Text =NewNo
如果通过代码要在父结点中增加子节点,代码如何实现?
父节点代码如下:
TreeNode pNode = new TreeNode();
pNode.ID = "Root ";
pNode.Text = strNodeName;
TreeView1.Nodes.Add(pNode);
如果要在根结点 "Root "下面再增加子节点,如何写代码?
TreeView1.Nodes.AddAt(pNode);这种方式好象不行.
TreeView1.Nodes[0].Nodes.Add(pNewNode);
/*************.Cs 中的代码****************************
string strScript= " <script language=\ "javascript\ " > ";
strScript+= " function GetNode() \n "+ "{ \n ";
strScript+= " alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute( 'Text '));\n " ;
strScript+= " alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute( 'CheckBox '));\n ";
strScript+= " alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute( 'Checked '));\n ";
strScript+= " if (TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute( 'Checked '))\n ";
strScript+= " TreeView1.getTreeNode(TreeView1.clickedNodeIndex).setAttribute( 'Checked ', 'false ');\n ";
strScript+= " else \n ";
strScript+= " TreeView1.getTreeNode(TreeView1.clickedNodeIndex).setAttribute( 'Checked ', 'true ');\n ";
strScript+= " \n } \n ";
strScript+= " </script> ";
if(! this.IsClientScriptBlockRegistered( "myjs "))
{
this.RegisterClientScriptBlock( "myjs ",strScript);
}
***************************************************//
现在我想在客户端点击父节点的checkbox则下级也被选中,可是使用下面的代码,只能表面选中,在服务器端却得不到,请问有什么其它好法子
<script language=\ "javascript\ " >
function GetNode()
{
var choose;
var indexid;
indexid=TreeView1.clickedNodeIndex;
if (TreeView1.getTreeNode(indexid).getAttribute( 'Checked '))
{
choose=false;
}
else
{
choose=true;
}
TreeView1.getTreeNode(indexid).setAttribute( 'Checked ',choose);
var NodeArray=new Array();
NodeArray=TreeView1.getTreeNode(indexid).getChildren();
for(i=0;i <NodeArray.length;i++)
{
var tempindex=indexid+ ". "+i;
TreeView1.getTreeNode(indexid).setAttribute( 'Checked ',choose);
}
}
//-->
</script>
[解决办法]
来学习的,帮顶
[解决办法]
http://www.microsoft.com/china/MSDN/library/archives/library/DNAspp/html/aspnet-usingtreeviewieWebcontrol.asp
这有例子,看看差不多了
[解决办法]
看你的代码有点晕.这是偶的树!
protected void bindTree()
{
string sql= "select top 1 ChannelID from Channel order by ChannelID desc ";//读取表中最后一个id号
int nodeNum;
try
{ //得到树节点数
nodeNum=(int)SqlHelper.ExecuteScalar (this.operate .SqlConn ,CommandType.Text ,sql);
nodeNum+=1;节点加1
if(nodeNum> 0)
{
this.leftTree1.Nodes .Clear ();//清空树节点
TreeNode [] nodes=new TreeNode [nodeNum];
for(int i=0;i <nodeNum;i++)
{
nodes[i]=new TreeNode ();//初始化节点数组
}
//请取每个节点内容
string sqlDataReader= "select * from Channel order by ChannelID asc ";
System.Data.SqlClient .SqlDataReader sqlDr=SqlHelper.ExecuteReader (operate.SqlConn ,System.Data .CommandType .Text ,sqlDataReader);
while(sqlDr.Read ())
{
//得到子节点和父节点的值
int myNodeId=(int)sqlDr[ "ChannelID "];
int myParentId=(int)sqlDr[ "parent_id "];
if(myParentId!=0)//是子节点
{
nodes[myNodeId].Text =sqlDr[ "ChannelName "].ToString ();//节点名字
nodes[myNodeId].Target = "mainFrame ";//右则窗口打开
//打开窗口
nodes[myNodeId].NavigateUrl = "Admin_ChannelManage.aspx?id= "+myNodeId.ToString ()+ "&&parentId= "+nodes[myParentId];
添加本节点到他父节点中
nodes[myParentId].Nodes .Add (nodes[myNodeId]);
}
else//主节点
{
nodes[myNodeId].Text =sqlDr[ "ChannelName "].ToString ();//节点名字
nodes[myNodeId].Target = "mainFrame ";
nodes[myNodeId].NavigateUrl = "Admin_ChannelManage.aspx?id= "+myNodeId.ToString ();
//添加到树的根目录下
this.leftTree1 .Nodes .Add (nodes[myNodeId]);
}
}
}
}
}
catch(Exception ex)
{
throw ex;
}
finally
{
this.operate .Disponse ();//关闭SqlConnection
}
}
[解决办法]
2 一级目录 一位数ID
20 二级目录 两位数ID
2000 三级目录 三位数ID
2000000 四级目录 七位数ID
你看是不是有这个规律,是的话,按这个规律一级一级的写
------解决方案--------------------
http://download.csdn.net/source/167457 例子自己看
数据库tree表
ID 父结点编号 结点名称
1 -1 中国人
2 1 武汉人
3 1 北京人
4 2 武昌人
5 2 汉口人
6 3 北京人1
7 6 北京人2
8 6 北京人3
中国人
|--武汉人
| |--武昌人
| |--汉口人
|
|--北京人
|--北京人1
|--北京人2
|--北京人3
[解决办法]
//设置树型结构函数
public void setMyTreeView()
{
//从TABLE_PRO里面取出省份编号和省份名称,并将其加入到树型结构中
string sql= "select BH,SF from TABLE_PRO ";
string sfbh,sf;
SqlConnection thisConn=new SqlConnection(conn);
SqlCommand thisCmd=new SqlCommand();
thisCmd.Connection=thisConn;
thisCmd.CommandText=sql;
try
{
thisCmd.Connection.Open();
SqlDataReader dr=thisCmd.ExecuteReader();
while(dr.Read())
{
sfbh=dr[ "BH "].ToString();
sf=dr[ "SF "].ToString();
//将省份名称添加到TreeView中
TreeNode newNode=new TreeNode();
newNode.Text=sf.Trim();
TreeView1.Nodes.Add(newNode);
//根据省份编号,设置属于该省的市级城市名称
setCITY0(sfbh,newNode);
}
}
catch(SqlException ex)
{
Response.Write(ex.ToString());
}
finally
{
thisCmd.Connection.Close();
}
}
//根据省份编号,从TABLE_CITY0中取得属于该省份的市级城市编号和名称,并将省份名称加入树型结构
public void setCITY0(string sfbh,TreeNode proNode)
{
string sql= "select BH,CS0 from TABLE_CITY0 where SFBH= ' "+sfbh+ " ' ";
string csbh,cs;
SqlConnection thisConn=new SqlConnection(conn);
SqlCommand thisCmd=new SqlCommand();
thisCmd.Connection=thisConn;
thisCmd.CommandText=sql;
try
{
thisCmd.Connection.Open();
SqlDataReader dr=thisCmd.ExecuteReader();
while(dr.Read())
{
csbh=dr[ "BH "].ToString();
cs=dr[ "CS0 "].ToString();
//将市级城市名称添加到TreeView中
TreeNode newNode=new TreeNode();
newNode.Text=cs.Trim();
proNode.Nodes.Add(newNode);
//根据市级城市编号,设置属于该市的县级城市名称
setCITY1(csbh,newNode);
}
}
catch(SqlException ex)
{
Response.Write(ex.ToString());
}
finally
{
thisCmd.Connection.Close();
}
}
//根据市级城市编号,从TABLE_CITY1中取得属于该市的县级城市单位名称,并其加入树型结构
public void setCITY1(string csbh,TreeNode proNode)
{
string sql= "select BH,XS from TABLE_CITY1 where CS0BH= ' "+csbh+ " ' ";
string xsbh,xs;
SqlConnection thisConn=new SqlConnection(conn);
SqlCommand thisCmd=new SqlCommand();
thisCmd.Connection=thisConn;
thisCmd.CommandText=sql;
try
{
thisCmd.Connection.Open();
SqlDataReader dr=thisCmd.ExecuteReader();
while(dr.Read())
{
xsbh=dr[ "BH "].ToString();
xs=dr[ "XS "].ToString();
//将市级城市名称添加到TreeView中
TreeNode newNode=new TreeNode();
newNode.Text=xs.Trim();
proNode.Nodes.Add(newNode);
}
}
catch(SqlException ex)
{
Response.Write(ex.ToString());
}
finally
{
thisCmd.Connection.Close();
}
}