二级主页面 pie_orders.aspx
在主页面pie_custoemrs.aspx中新增饼图元素时还设置了饼图项目的超链接“pie_orders.aspx?customerid=客户编号”,这样用户点击饼图图片中的热点时就能跳转到二级主页面来显示指定客户的订单详细信息。
二级主页面和主页面有点类似,都用一个饼图来显示数据。其页面结构和处理过程也差不多,它的Page_Load方法代码为
private void Page_Load(object sender, System.EventArgs e)
{
string customerid = this.Request.QueryString["customerid"] ;
if( customerid == null || customerid.Length == 0 )
return ;
// 连接数据库
using( OleDbConnection conn = new OleDbConnection())
{
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ this.Server.MapPath("demomdb.mdb");
conn.Open();
// 查询数据库
using( OleDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = @"
SELECT OrderDate AS 订购时间,
shipname AS 运输人,
shipaddress AS 地点,
( select
sum( round( unitprice * quantity * ( 1 - discount) , 3 ) )
from orderdetails
where orderdetails.orderid = orders.orderid
) AS 总金额
FROM orders
WHERE customerid ='" + customerid + "'" ;
OleDbDataReader reader = cmd.ExecuteReader();
// 创建饼图对象
PieShape pie = new PieShape();
pie.Width = 400 ;
pie.Height = 300 ;
System.IO.StringWriter writer = new System.IO.StringWriter();
while( reader.Read())
{
double Value = Convert.ToDouble( reader.GetValue( 3 ));
string Text = "时间:" + reader.GetValue( 0 )
+ "\r\n人员:" + reader.GetValue( 1 )
+ "\r\n地点:" + reader.GetValue( 2 )
+ "\r\n金额:" + reader.GetValue( 3 );
string Link = "#" ;
pie.Add( Value , Text , Link );
}//while
reader.Close();
// 刷新饼图状态
pie.RefreshState();
this.Session["customerid"] = pie ;
this.lblResult.Text = pie.GetHtmlString("pieimage.aspx?name=customerid");
this.DataGrid1.DataSource = pie ;
this.DataGrid1.DataBind();
}//using
}//using
}
本页面中,首先从页面参数中获得客户编号,然后连接数据库,进行SQL查询,获得指定客户编号的所有订单记录。然后将查询所得数据填充到一个饼图文档对象,然后将该文档对象使用名称customerid保存到Session中,这样未来运行的图片服务页面就从Session中获得名称为cusotmerid的饼图文档对象来显示饼图图片了。
关注此文的读者还看过: