在asp.net中使用treeview 二

 
一、            下載源碼
 
二、            安裝及編譯
1、執行安裝文件後,在安裝目錄找到 “build.bat”文件,用記事本將其打開。把“csc.exe”換成絕對路徑“C:/WINNT/Microsoft.NET/Framework/v1.1.4322/csc.exe”。保存後執行(記得把“只讀”屬性去掉)。
 
    2、編譯完成後,在安裝目錄下可以看到“build”活頁夾﹐把該目錄下的“Runtime”子目錄裏所有文件複製到“C:/Inetpub/wwwroot/webctrl_client/1_0”(若沒有,則自行創建。注意,在 IIS 中新建站點的話,必須把“webctrl_client”目錄複製到站點根目錄下)
 
三、            VS.NET 中使用
1、                打開 VS.NET → 右擊“工具箱”→ 添加/刪除項目 → 瀏覽 → 選中上述編譯的文件“Microsoft.Web.UI.WebControls.dll”→ 確認後即可看到添加的“TreeView”控件

 

 
 

2、                 將“TreeView”控件拖入頁面 → 屬性 → 節點(Node)→ 添加根節點(或添加子節點)
 
四、            從數據庫讀取節點信息
保存節點信息的 Table 基本結構爲

1、全部讀取並一次性展現
    
           private void Page_Load(object sender, System.EventArgs e)
           {
                if(IsPostBack)
                {
                     return;
                }
                DBSystem.ExecuteSQL tmp = new DBSystem.ExecuteSQL("T");
                DataTable dt = tmp.GetDataTable("select * from TreeView");//從數據庫抓出數據
                this.AddNodes(dt,null,"0");   //添加節點
                this.TreeView1.SelectedNodeIndex="";   //不選中任何節點。
/*下一節將介紹如何修改TreeView.cs 源碼來取消默認選中節點的方法*/
           }
 
           ///<summary>
           ///添加節點及其包含的子節點
           ///</summary>
           ///<param name="dt">從數據庫抓出的DataTable</param>
           ///<param name="node">將要添加子節點的父節點</param>
           ///<param name="id">父節點的ID,“0爲根節點</param>
           private void AddNodes(DataTable dt,TreeNode node,string id)
           {
                DataRow[] rows = dt.Select("ParentID="+id); //篩選出屬於父節點node”的子節點集合
                foreach(DataRow dr in rows) //循環子節點集合
                {
                     TreeNode nd = new TreeNode();
                     nd.NavigateUrl=dr["URL"].ToString(); //設置瀏覽的網址
                     nd.NodeData=dr["NodeID"].ToString(); //存放節點ID
                     nd.Text=dr["NodeName"].ToString();   //設置節點名稱
                     this.AddNodes(dt,nd,nd.NodeData);    //遞歸,添加該節點的子節點
                     if(node==null || id=="0")
                     {
                           this.TreeView1.Nodes.Add(nd);    //添加至根節點
                     }
                     else
                     {
                           node.Nodes.Add(nd);              //添加子節點
                     }
                }

2、       展開節點時讀取該節點的數據
TreeView 控件屬性→ 自動提交(AutoPostBack) → True
TreeView 控件屬性→ 事件 → 雙擊展開(Expand
 
           private void Page_Load(object sender, System.EventArgs e)
           {
                if(!IsPostBack)
                {
                     this.AddSingleNode(null,"0"); //找出根節點
                }
                this.TreeView1.SelectedNodeIndex="";   //不選中任何節點
           }
 
           ///<summary>
           ///展開節點時,觸發的事件
           ///</summary>
           ///<param name="sender">TreeView 控件</param>
           ///<param name="e"></param>
           private void TreeView1_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
           {
                TreeNode nd = this.TreeView1.GetNodeFromIndex(e.Node); //找到觸發事件的節點,即正在展開的節點
                if(nd.Nodes[0].NodeData=="") //第一次加載,即只有“正在加載……”這一項
                {
                     this.AddSingleNode(nd,nd.NodeData); //加載子節點
                }
           }
 
           ///<summary>
           ///只查找、添加單個節點下的子節點
           ///</summary>
           ///<param name="node">需要添加子節點的TreeNode</param>
           ///<param name="id">該節點的NodeID </param>
           private void AddSingleNode(TreeNode node,string id)
           {
                if(node!=null && id!="0")
                {
                     node.Nodes.Clear();//清空節點,主要是把“正在加載……”這一項移除
                }
                DBSystem.ExecuteSQL tmp = new DBSystem.ExecuteSQL("T");
                DataTable dt = tmp.GetDataTable("select * from TreeView where ParentID="+id);//從數據庫抓出數據
                foreach(DataRow dr in dt.Rows) //歷遍所有子節點
                {
                     TreeNode nd = new TreeNode();
                     nd.NavigateUrl=dr["URL"].ToString(); //設置瀏覽的網址
                     nd.NodeData=dr["NodeID"].ToString(); //存放節點ID
                     nd.Text=dr["NodeName"].ToString();   //設置節點名稱
 
                     TreeNode child = new TreeNode();     //此節點只作爲“nd”展開的依據,並無它意
                     child.Text="正在加載……";
                     nd.Nodes.Add(child);
                     if(node==null|| id=="0")
                     {
                           this.TreeView1.Nodes.Add(nd);    //添加至根節點
                     }
                     else
                     {
                           node.Nodes.Add(nd);              //添加子節點
                     }
                }
           }
五、            修改“TreeView.cs”源碼,取消TreeView 默認選中節點
1、TreeView.cs 文件
在文中﹐找到 “protected override void OnLoad(EventArgs e)”事件
protected override void OnPreRender(EventArgs e)” 事件,修改以下代碼
 
if ((SelectedNodeIndex == "" || SelectedNodeIndex == String.Empty) && Nodes.Count > 0)
           //SelectedNodeIndex = "0"; //修改前
           SelectedNodeIndex = "";    //修改後
 
2、TreeView.htc 文件
在“C:/Inetpub/wwwroot/webctrl_client/1_0/ TreeView.htc”中找到“function ondocumentready()”把以下代碼註釋掉
// verify selectedNodeIndex
/****************** Change By Jerry On 2005-01-25 ******************/
/*
if (getNodeFromIndex(selectedNodeIndex) == null) { if (getNodeFromIndex("0") != null) selectedNodeIndex = "0"; else selectedNodeIndex = ""; }
*/
/****************** Change By Jerry On 2005-01-25 ******************/
在“function tryToBuildTreeFromRoot()”修改以下代碼
if (selectedNodeIndex.length == 0)
                {
 //prop_selectedNodeIndex = "0";  //修改前
 prop_selectedNodeIndex = ""; //修改後
}
3、使用
修改“TreeView.cs”後,重新編譯一次,生成新的“Microsoft.Web.UI.WebControls.dll”。應用時只需要設置SelectedNodeIndex”爲 “” 即可
              this.TreeView1.SelectedNodeIndex="";   //不選中任何節點。
 
六、            使用 XML 文檔創建TreeView
1、XML 文檔的要求
a)      描述節點名稱是固定的“<treenodes”與“<treenode></treenode>></treenodes>
b)      雖然 XML 文文件對字母的大小寫嚴格區分,但綁定時會忽略
c)      <treenode></treenode>節點中的屬性,必須與TreeView 控件中的TreeNode 屬性對應
d)      <treenode></treenode>”節點中的文本不能寫在節點內,只能以 “Text”屬性出現,如“<treenode>Node01</treenode>”行不通,應爲“<treenode Text="Node01"></treenode>
以下是一個可用於“TreeView”控件綁定源的範例﹕
<?xmlversion="1.0"encoding="utf-8"?>
<TREENODES>
     <TREENODE Text="Node01">
           <TREENODENavigateUrl="04.htm"Text="Node04"></TREENODE>
     </TREENODE>
     <treenodeNavigateUrl="05.htm"text="Node05"NodeData="05"CheckBox="true"></treenode>
     <TREENODENavigateUrl="03.htm"Text="Node03"></TREENODE>
</TREENODES>
2、綁定的代碼
                this.TreeView1.TreeNodeSrc="TreeXML.xml";
                this.TreeView1.DataBind();



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章