程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅-高性能ASP.NET樹狀列表控件(下)(4)

C#發現之旅-高性能ASP.NET樹狀列表控件(下)(4)

編輯:關於C語言

在這個函數中,首先連接程序目錄下的演示數據庫 SkyDemo.mdb,然後執行一個比較復雜的SQL查詢,獲得數據庫中所有的客戶名稱,訂單信息和訂單貨物信息,然後填充到myTreeVIEw的Nodes屬性中,從而在內存中構造了一個三層的樹狀結構。

這裡面可以看到樹狀列表沒有自動的數據源綁定功能。由於樹狀結構處理過程復雜,簡單的數據源綁定難於實現,因此這個樹狀列表控件不提供數據源綁定功能,而是需要使用者編程向列表添加節點。

填充第一個樹狀列表後,程序然後再次查詢數據庫,獲得所有的客戶名稱和編號,然後填充到myTreeView2 的Nodes中,並設置每個節點的XMLSource屬性。而XMLSource屬性就規定了客戶端動態加載子節點使用的XML文檔的URL地址。這裡使用了另外一個頁面“TreeVIEwNodeXML.ASPx”作為XML文檔的提供者,並向該頁面傳遞參數來決定生成什麼樣的節點定義XML文檔。而且該頁面生成的XML文檔格式符合剛才設計的節點XML文檔格式。

在這個頁面中,沒有任何生成Html代碼的代碼,所做的只是向頁面拖拽放置樹狀列表,然後查詢數據庫填充控件的節點結構,可以說使用比較方便,這個樹狀列表控件內部自動完成了所有的底層工作。

TreeVIEwNodeXML.ASPx

本頁面是一個後台服務頁面,用於向第二個樹狀列表動態的提供子節點信息。該頁面也不復雜,它沒有Html代碼,其ASPX文件只有一行代碼,其代碼如下

<%@ Page language="c#" Inherits="CS_Discovery.TreeViewNodeXml" CodeFile="TreeVIEwNodeXML.ASPx.cs" %>

查看該頁面的C#代碼,只有一個Page_Load函數,其代碼為

protected void Page_Load(object sender, System.EventArgs e)
{
    // 關鍵字的類型
    string KeyType = this.Request.QueryString["KeyType"] ;
    // 關鍵字的數值
    string KeyValue = this.Request.QueryString["KeyValue"];
    // 設置頁面輸出格式
    this.Response.ContentEncoding = System.Text.Encoding.GetEncoding( 936 );
    this.Response.ContentType = "text/XML";
    
    // 根據頁面輸出流創建XML文檔書寫器
    System.Xml.XmlTextWriter writer = new System.Xml.XMLTextWriter( this.Response.Output );
    // 設置帶縮進
    writer.IndentChar = ' ' ;
    writer.Indentation = 3;
    writer.Formatting = System.XML.Formatting.Indented ;
    // 開始輸出XML文檔
    writer.WriteStartDocument();
    writer.WriteStartElement("Nodes");
    // 連接數據庫
    using( System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection())
    {
        conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
            + this.Server.MapPath("SkyDemo.mdb");
        conn.Open();
        // 查詢數據庫
        using( System.Data.OleDb.OleDbCommand cmd = conn.CreateCommand())
        {
            if (KeyType == "customerid")
            {
                // 關鍵字為客戶編號,則此時查詢該客戶編號下的所有的訂單信息
                cmd.CommandText = "select orderid , shipname from orders where customerid='"
                    + KeyValue +"' order by orderid";
                System.Data.IDataReader reader = cmd.ExecuteReader();
                while( reader.Read())
                {
                    writer.WriteStartElement("Node");
                    string NodeID = System.Guid.NewGuid().ToString();
                    // 創建節點編號
                    writer.WriteElementString("ID" , NodeID );
                    writer.WriteElementString("Icon","order.bmp");
                    // 節點文本就是訂單編號和訂單人姓名
                    writer.WriteElementString("Text" , 
                        Convert.ToString( reader.GetValue( 0 ) )
                        + "-" + Convert.ToString( reader.GetValue( 1 )));
                    // 輸出生成子節點使用的XML文檔URL地址,從功能上看相當於遞歸調用本頁面
                    writer.WriteElementString("XMLSource" ,
                        "TreeVIEwNodeXML.ASPx?KeyType=orderdetails&KeyValue=" 
                        + Convert.ToString( reader.GetValue( 0 )) );
                    writer.WriteEndElement();
                }
                reader.Close();
            }
            else if( KeyType == "orderdetails" )
            {
                // 關鍵字為訂單編號,則此時查詢該訂單編號下的所有的貨物的信息
                cmd.CommandText = @"
Select 
    products.productname , 
    orderdetails.quantity 
from 
    orderdetails , 
    products 
where 
    orderdetails.productid = products.productid 
    and orderdetails.orderid=" + KeyValue + " order by productname ";
                System.Data.IDataReader reader = cmd.ExecuteReader();
                while( reader.Read())
                {
                    writer.WriteStartElement("Node");
                    string NodeID = System.Guid.NewGuid().ToString();
                    writer.WriteElementString("ID" , NodeID );
                    writer.WriteElementString("Icon" , "product.bmp" );
                    writer.WriteElementString("Text" ,
                        Convert.ToString( reader.GetValue( 0 )));
                    writer.WriteElementString("OnClick" ,
                        "alert('" + Convert.ToString( reader.GetValue( 0 )) + "')" );
                    writer.WriteEndElement();
                }
                reader.Close();
            }
        }//using
    }//using
    writer.WriteEndElement();
    writer.WriteEndDocument();
    writer.Close();
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved