C#发现之旅 - 高性能ASP.NET树状列表控件(下)
2010-09-30 21:03:02 来源:WEB开发网TreeNodeStyleString 节点的CSS样式字符串。
查看该页面的HTML代码,可以看到这里使用了标签“SkyWebControl:SkyTreeViewControl”来定义一个树状列表控件。一些控件的属性值保存在HTML标签的属性中。
一般的。NET框架中的WEB控件在HTML代码中的前缀是“asp”,比如 “asp:label”,“asp:button”,“asp:TextBox”等。开发人员在开发自己的WEB控件也可以使用自己的HTMJL标签前缀,在树状列表控件的C#源代码中开头有一条指令
[assembly:System.Web.UI.TagPrefix("CS_Discovery" , "SkyWebControl")]
这条指令就指明自定义控件采用什么样的标签前缀。
查看这个页面的C#代码,可以看到代码还是不复杂的。主要包含了一个Page_Load函数,该函数的代码为
protected void Page_Load(object sender, System.EventArgs e)
{
if( myTreeView.Nodes.Count == 0 )
{
// 连接数据库
using( OleDbConnection conn = new OleDbConnection())
{
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ this.Server.MapPath("SkyDemo.mdb");
conn.Open();
using( OleDbCommand cmd = conn.CreateCommand())
{
// 查询数据库,获得所有的客户名称、订单号和产品名称,
// 向树状列表myTreeView 填充内容
cmd.CommandText = @"
select
trim(Customers.CompanyName) ,
trim(orders.orderid & chr(32) & orders.shipname) ,
trim(products.productname)
from
customers ,
orders ,
orderdetails ,
products
where
customers.customerid = orders.customerid
and orders.orderid = orderdetails.orderid
and orderdetails.productid = products.productid
order by
trim(Customers.CompanyName) ,
orders.orderid,
trim(products.productname)";
OleDbDataReader reader = cmd.ExecuteReader();
// 客户公司节点
SkyTreeNode CompanyNode = null;
// 客户订单节点
SkyTreeNode OrderNode = null;
while( reader.Read())
{
// 读取客户公司名称
string cname = Convert.ToString( reader.GetValue( 0 ));
// 读取订单编号和订货人名称
string oname = Convert.ToString( reader.GetValue( 1 ));
// 读取产品名称
string pname = Convert.ToString( reader.GetValue( 2 ));
if( CompanyNode == null || cname != CompanyNode.Text )
{
// 创建新的客户公司节点并添加到控件myTreeView 中
OrderNode = null;
CompanyNode = new SkyTreeNode();
CompanyNode.Text = cname ;
CompanyNode.Icon = "customer.bmp";
myTreeView.Nodes.Add( CompanyNode );
}
if( OrderNode == null || oname != OrderNode.Text )
{
// 创建新的订单节点并添加到客户公司节点下
OrderNode = new SkyTreeNode();
OrderNode.Text = oname ;
OrderNode.Icon = "order.bmp";
CompanyNode.Nodes.Add( OrderNode );
}
// 创建新的货物节点并添加到订单节点下
SkyTreeNode ProductNode = new SkyTreeNode();
ProductNode.Text = pname ;
ProductNode.Icon = "product.bmp";
ProductNode.OnClick = "alert('" + pname + "')" ;
OrderNode.Nodes.Add( ProductNode );
}//while
reader.Close();// 树状列表myTreeView 填充完毕
// 查询数据库获得所有的客户编号和客户名称,准备填充树状列表控件myTreeView2
cmd.CommandText = "Select customerid , companyname from customers "
+" order by companyname";
reader = cmd.ExecuteReader();
while( reader.Read())
{
// 创建新的客户节点并添加到控件myTreeView2 下。
string NodeID = System.Guid.NewGuid().ToString();
SkyTreeNode node = new SkyTreeNode();
node.ID = NodeID ;
node.Text = Convert.ToString( reader.GetValue( 1 ));
node.Icon = "customer.bmp";
// 设置节点的XMLSource属性准备客户端动态加载子节点
// 此处需要配合使用TreeViewNodeXml.aspx 页面。
node.XMLSource = "TreeViewNodeXml.aspx?KeyType=customerid&KeyValue="
+ Convert.ToString( reader.GetValue( 0 ) ) ;
myTreeView2.Nodes.Add( node );
}
reader.Close();
}//using
}//using
}
this.lblInfo.Text = "本控件共有节点" + myTreeView.AllNodes.Count + " 个";
this.lblInfo2.Text = "本控件初始化有" + myTreeView2.AllNodes.Count
+ " 个节点,能动态加载子节点";
}
更多精彩
赞助商链接