说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

使用treeview数据库绑定,能不能绑到一个子节点下?

编辑:说三道四文库 发布时间:2018-07-19 10:21
HTML文档下载 WORD文档下载 PDF文档下载
开始手工加了节点,其中有子节点是可变的,须从数据库生成.
好痛苦啊!
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;  
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace myoa
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Data.OleDb.OleDbConnection oleDbConnection1;
protected System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter1;
protected System.Data.DataSet dataSet1;
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
DataSet ds=new DataSet();
public string objConn;
//public string objConn ="Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+"\\dATABASE\\myoa.mdb";
OleDbConnection MyConn;
OleDbDataAdapter mycommand;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
//TreeView1.Width=100;
//TreeView1.Height=450;   
objConn ="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("dATABASE\\myoa.mdb");
string NodeText="-1";
MyConn=new OleDbConnection(objConn);  
mycommand=new OleDbDataAdapter("select * from tree where TreeNode='"+NodeText+"' order by NodeNumber asc",MyConn);
MyConn.Open();
mycommand.Fill(ds);
int i;
//===根结点数
for(i=0;i<ds.Tables[0].Rows.Count;i++)
{
Microsoft.Web.UI.WebControls.TreeNode myTreeNode=new Microsoft.Web.UI.WebControls.TreeNode();
//dim myTreeNode as new Microsoft.Web.UI.WebControls.TreeNode()
myTreeNode.Text=ds.Tables[0].Rows[i].ItemArray[1].ToString() ;
myTreeNode.ImageUrl="images/closedfolder.gif";
myTreeNode.ExpandedImageUrl="images/openfolder.gif";
myTreeNode.NavigateUrl="Query.aspx?NodeText="+myTreeNode.Text;
myTreeNode.Target="mainFrame";
TreeView1.Nodes.Add(myTreeNode);
//Response.Write( ds.Tables[0].Rows[i].ItemArray[0].ToString());
//Response.Write("<br>");
//Response.Write( ds.Tables[0].Rows[i].ItemArray[1].ToString());
CreateChildTree(myTreeNode,ds.Tables[0].Rows[i].ItemArray[0].ToString() ,ds.Tables[0].Rows[i].ItemArray[1].ToString() );
}
//end sub
}
public void CreateChildTree(Microsoft.Web.UI.WebControls.TreeNode ParentNode,string NodeId ,string ParentNodeText)
{
mycommand=new OleDbDataAdapter("select * from tree where TreeNode='"+NodeId+"' order by NodeNumber desc",MyConn);
//MyConn.Open();
mycommand.Fill(ds,"second");
int i;
for(i=0;i<ds.Tables["second"].Rows.Count;i++)
{
Microsoft.Web.UI.WebControls.TreeNode myTreeNode=new Microsoft.Web.UI.WebControls.TreeNode();
myTreeNode.Text=ds.Tables["second"].Rows[i].ItemArray[1].ToString();  
myTreeNode.ImageUrl="images/book.gif";
string myTreeNodeText =myTreeNode.Text;
string ParentNodeTextS =ParentNodeText;
//myTreeNodeText=Server.UrlEncode(myTreeNodeText);
//ParentNodeTextS=Server.UrlEncode(ParentNodeTextS);
myTreeNode.NavigateUrl="Query.aspx?NodeText="+myTreeNodeText+"&ParentNodeText="+ParentNodeTextS;
myTreeNode.Target="mainFrame";
ParentNode.Nodes.Add(myTreeNode);

}
ds.Tables["second"].Clear(); 
}

#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.oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
this.oleDbDataAdapter1 = new System.Data.OleDb.OleDbDataAdapter();
this.dataSet1 = new System.Data.DataSet();
((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit();
// 
// dataSet1
// 
this.dataSet1.DataSetName = "NewDataSet";
this.dataSet1.Locale = new System.Globalization.CultureInfo("zh-CN");
this.Load += new System.EventHandler(this.Page_Load);
((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit();

}
#endregion
}

//public Sub resize()
}
初始化页面节点的代码:       
Private Sub initTree(ByVal nds As TreeNodeCollection, ByVal parentID As Integer)
            Dim dv As New DataView()
            Dim tmpNd As TreeNode
            Dim strId As Integer
            dv.Table = ds.Tables("TitleTree")
            dv.RowFilter = "parentid='" + parentID.ToString() + "'"
            Dim objRow As DataRowView

            For Each objRow In dv
                tmpNd = New TreeNode()
                strId = CInt(objRow("nodeid"))
                tmpNd.ID = strId.ToString()
                tmpNd.Text = objRow("nodename").ToString()
                tmpNd.ExpandedImageUrl = objRow("imgex").ToString()
                tmpNd.ImageUrl = objRow("img").ToString()
                tmpNd.NavigateUrl = objRow("address").ToString()
                nds.Add(tmpNd)
                initTree(nds(nds.Count - 1).Nodes, strId)
            Next

        End Sub

生成节点表的脚本文件:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[visit_TitleTree]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[visit_TitleTree]
GO

CREATE TABLE [dbo].[visit_TitleTree] (
[parentid] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[nodeid] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[nodename] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[imgex] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[img] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[address] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO
很简单吧?:)
个人认为还是把节点都放在XML文件里比较好。数据库这东西,有的时候响应慢,树形页面就不见了。
楼上的很清楚!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘