WEB开发网
开发学院软件开发C语言 C#发现之旅 - 高性能ASP.NET树状列表控件(下) 阅读

C#发现之旅 - 高性能ASP.NET树状列表控件(下)

 2010-09-30 21:03:02 来源:WEB开发网   
核心提示: 在这个函数中,首先连接程序目录下的演示数据库 SkyDemo.mdb,C#发现之旅 - 高性能ASP.NET树状列表控件(下)(6),然后执行一个比较复杂的SQL查询,获得数据库中所有的客户名称,其代码为 protectedvoidPage_Load(objectsender,System.Ev

在这个函数中,首先连接程序目录下的演示数据库 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 3 4 5 6 7  下一页

Tags:发现 之旅 高性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接