摘 要 本文介紹一種基於web方式BS應用模式下,使用C#.net編程工具實現oracle數據庫記錄自動生成TreeView樹型結構的程序設計。
關鍵詞 c# ;動態;樹型;程序設計
許多應用軟件的程序設計,我們都希望能像Windows資源管理器那樣將其驅動器和其下的文件及文件夾按照層次結構來安排。在C/S條件下這些很容易實現,那麼在B/S的Web方式下,我們實現起來就不是特別容易。針對這個問題,在 2002 年,Microsoft? 發布了四種 ASP.NET Web 控件,用於為使用 Microsoft Internet Explorer 的 Web 訪問者提供更好的體驗。這些 Web 控件稱為 Internet Explorer Web 控件,也簡稱為 IE Web 控件,其中就包含了TreeView Web 控件 ,它就為我們提供了一種按層次結構顯示信息的方式。TreeView控件包含了稱做“節點”(node)的一些條目的一個列表。每一個節點都可以有自己的節點集合,從而提供了一種更深層的數據定義。每個節點都可以被折疊起來,從而允許訪問者在一個TreeView控件中查找,只看他所感興趣的那一級的數據。就像Windows的資源管理器一樣。只不過在使用前要安裝IE Web Controls,並配置好運行環境後才能使用,使用Visual Studio .NET,則靜態指定 TreeView 結構就像填寫幾份表格一樣簡單。
雖然使用 Visual Studio .NET 將靜態 TreeNote 添加到 TreeView 的過程非常簡單,但通常需要將內容動態地添加到 TreeView 中。例如,您將目錄樹信息存儲到了數據庫中,或是正在設計一個資源管理器風格的 Web 應用程序(在此應用程序中,用戶可以浏覽 Web 服務器的文件系統),這時您可能需要根據服務器的文件夾和文件來動態填充 TreeNote。本文就是使用C#.net語言通過編程方式,配合Oracle數據庫實現一種動態的效果,達到動態的將TreeNote 添加到 TreeView 的目的。
1、 設計思路和方法 該程序設計思路和方法是:通過編程方式將TreeNote 添加到 TreeView 中。要將新的 TreeNote 添加到現有的 TreeNote 中,只需要使用 Nodes 屬性的 Add() 方法。方法是使用 C# 代碼將創建兩個 TreeNote,並將第二個 TreeNote 添加為第一個 TreeNote 的子節點。然後,將第一個子節點添加到 TreeView 的根節點中。
2、開發實例及程序源碼 2.1 使用前數據庫和IE Web控件的准備工作
1)假如我們要建立如下圖的數型結構
圖 1
圖1說明:器材管理、工地信息、公共信息是根節點,其余是子節點。
2)在oracle數據庫中建立如下圖表的數據庫表及字段
圖 2
圖2 說明:在數據庫中設計字段時將菜單等級確定下來,用流水號來表示唯一性。
圖 3
圖3說明:器材管理根節點的子節點,所屬主單序號001表明它要生成在器材管理之下。
圖 4
圖4說明:工地信息根節點的子節點,所屬主單序號002表明它要生成在工地信息之下。
圖 5
圖5說明:公共信息根節點的子節點,所屬主單序號005表明它要生成在公共信息之下。
3)IE Web控件的准備工作
IE Web 控件可以在安裝了 .NET Framework 版本 1.0 或 1.1 的 Web 服務器上使用,在內含代碼的類中使用 IE Web 控件,首先需要右擊 Reference(引用),然後選擇 Add Reference(添加引用),將引用添加到 Microsoft.Web.UI.WebControls.dll 程序集中。然後,在內含代碼的類中,如果使用的是 C# ,則添加 using Microsoft.Web.UI.WebControls;
2.2 界面和程序設計
1) 上傳設計
1.1) Web界面如下
圖 6
圖6說明:在界面上對應設置控件TreeView1.
1.2) 動態生成TreeView源代碼
using Microsoft.Web.UI.WebControls;//添加控件的引用
private void GetTreeView()//程序開始
{
try
{
string strSql = "SELECT DISTINCT Menu_id,Menu_name from docmodulemanager where Menu_level = 1 and sn in
("+All.Substring(0,All.Length-1).ToString()+")";
OracleDataAdapter
objAdapter = new OracleDataAdapter(strSql,objConn);
DataSet ds = new DataSet();
ds.Clear ();
objAdapter.Fill(ds,"temp");
DataTable dt = ds.Tables["temp"];
TreeView1.Nodes.Clear();
//建立根節點,遍歷。
foreach(DataRow dr in dt.Rows)
{
TreeNode Root = new TreeNode();
Root.Text = dr["Menu_name"].ToString();
TreeView1.Nodes.Add(Root);//建立根節點
string str = "SELECT Menu_name,menu_addr,sn from docmodulemanager where upper_id = '" + dr["Menu_id"].ToString() + "' and sn in ("+menu_sn.Substring(0,menu_sn.Length-1).ToString()+")"+"order by menu_id,child_id";
OracleDataAdapter objAdapterNode = new OracleDataAdapter(str,objConn);
DataSet dsNode = new DataSet();
dsNode.Clear ();
objAdapterNode.Fill(dsNode,"tempNode");
DataTable dtNode = dsNode.Tables["tempNode"];
//建立子節點,遍歷。
foreach(DataRow drNode in dtNode.Rows)
{
TreeNode Node = new TreeNode();
Node.Text = drNode["Menu_name"].ToString();
Node.Target = "mainbottom";
string Path = drNode["menu_addr"].ToString();
int menusn = Convert.ToInt32(drNode["sn"].ToString());
Node.NavigateUrl = "Transfer.aspx"+"?menu_addr="+ Path;
Root.Nodes.Add(Node);//建立子節點
}
}
}
catch
{
Response.Write(" alert('您沒有可操作的菜單項,請與管理員聯系!'); ");
}
finally
{
if (objConn.State.ToString().Equals ("Open")) objConn.Close();
}
}
查閱關於
C# 的全部文檔