devexpress 水晶报表控件 实现递归显示
2009-12-03 10:07
411 查看
需要,要实现这样的效果,文字苍白,直接用图看效果,
主要效果如上图, 当用户点击中国的柱形时候,显示省份的数据,再点击省份,显示市的数据,
代码如下:
<div>
<dxchartsui:WebChartControl ID="WebChartControl1" runat="server"
Height="298px" Width="510px" ClientInstanceName="chart" DiagramTypeName="XYDiagram" OnCallbackStateLoad="WebChartControl1_CallbackStateLoad" OnCustomCallback="WebChartControl1_CustomCallback" OnObjectSelected="WebChartControl1_ObjectSelected" SeriesSorting="Ascending" DataSourceID="SqlDataSource1" >
<SeriesSerializable>
<cc1:Series ArgumentDataMember="cn" LabelTypeName="SideBySideBarSeriesLabel" Name="Categories"
PointOptionsTypeName="PointOptions" SeriesViewTypeName="SideBySideBarSeriesView"
ValueDataMembersSerializable="pr">
<label hiddenserializablestring="to be serialized">
<fillstyle filloptionstypename="SolidFillOptions">
<Options HiddenSerializableString="to be serialized"></Options>
</fillstyle>
</label>
<pointoptions hiddenserializablestring="to be serialized"></pointoptions>
<legendpointoptions hiddenserializablestring="to be serialized"></legendpointoptions>
<view hiddenserializablestring="to be serialized"></view>
</cc1:Series>
<cc1:Series LabelTypeName="SideBySideBarSeriesLabel" Name="Products" ArgumentDataMember="cn" ValueDataMembersSerializable="pr" PointOptionsTypeName="PointOptions"
SeriesViewTypeName="SideBySideBarSeriesView" Visible="False" >
<label hiddenserializablestring="to be serialized">
<fillstyle filloptionstypename="SolidFillOptions">
<Options HiddenSerializableString="to be serialized"></Options>
</fillstyle>
</label>
<datafilters>
<cc1:DataFilter DataType="System.Int32" ColumnName="fid"></cc1:DataFilter>
</datafilters>
<pointoptions hiddenserializablestring="to be serialized"></pointoptions>
<legendpointoptions hiddenserializablestring="to be serialized"></legendpointoptions>
<view hiddenserializablestring="to be serialized"></view>
</cc1:Series>
<cc1:Series ArgumentDataMember="cn" LabelTypeName="SideBySideBarSeriesLabel" Name="city"
PointOptionsTypeName="PointOptions" SeriesViewTypeName="SideBySideBarSeriesView"
ValueDataMembersSerializable="pr" Visible="False">
<label hiddenserializablestring="to be serialized">
<fillstyle filloptionstypename="SolidFillOptions">
<Options HiddenSerializableString="to be serialized"></Options>
</fillstyle>
</label>
<datafilters>
<cc1:DataFilter DataType="System.Int32" ColumnName="fid"></cc1:DataFilter>
</datafilters>
<pointoptions hiddenserializablestring="to be serialized"></pointoptions>
<legendpointoptions hiddenserializablestring="to be serialized"></legendpointoptions>
<view hiddenserializablestring="to be serialized"></view>
</cc1:Series>
</SeriesSerializable>
<ClientSideEvents ObjectHotTracked="function(s, e) {
if(e.hitInfo.inSeries)
{
var a=e.hitObject.name;
if(a=='Categories')
{
var hitInCategory = e.hitInfo.inSeries && e.chart.series[0].visible;
var hitInBackTitle = e.hitInfo.inChartTitle && !e.chart.series[0].visible;
s.SetCursor((hitInCategory || hitInBackTitle) ? 'pointer' : 'default');
}
else if(a=='Products')
{
var hitInCategory = e.hitInfo.inSeries && e.chart.series[1].visible;
var hitInBackTitle = e.hitInfo.inChartTitle && !e.chart.series[1].visible;
s.SetCursor((hitInCategory || hitInBackTitle) ? 'pointer' : 'default');
}
}
}" ObjectSelected="function(s, e) {
if(e.hitInfo.inSeries)
{
var a=e.hitObject.name;
if(a=='Categories')
{
var hitInCategory = e.hitInfo.inSeries && e.chart.series[0].visible;
var hitInBackTitle = e.hitInfo.inChartTitle && !e.chart.series[0].visible;
e.processOnServer = hitInCategory || hitInBackTitle;
}
else if(a=='Products')
{
var hitInCategory = e.hitInfo.inSeries && e.chart.series[1].visible;
var hitInBackTitle = e.hitInfo.inChartTitle && !e.chart.series[1].visible;
e.processOnServer = hitInCategory || hitInBackTitle;
}
}
}
" />
<Titles>
<cc1:ChartTitle>
</cc1:ChartTitle>
<cc1:ChartTitle Alignment="Near" Font="Tahoma, 10pt, style=Underline" Text="Back to the main view..."
Visible="False" TextColor="Blue" Antialiasing="False">
</cc1:ChartTitle>
</Titles>
<Legend AlignmentVertical="Center"></Legend>
<SeriesTemplate LabelTypeName="SideBySideBarSeriesLabel" PointOptionsTypeName="PointOptions"
SeriesViewTypeName="SideBySideBarSeriesView" SeriesPointsSorting="Ascending">
<PointOptions HiddenSerializableString="to be serialized">
</PointOptions>
<Label HiddenSerializableString="to be serialized">
<FillStyle FillOptionsTypeName="SolidFillOptions">
<Options HiddenSerializableString="to be serialized" />
</FillStyle>
</Label>
<LegendPointOptions HiddenSerializableString="to be serialized">
</LegendPointOptions>
<View HiddenSerializableString="to be serialized">
</View>
</SeriesTemplate>
<FillStyle FillOptionsTypeName="SolidFillOptions">
<Options HiddenSerializableString="to be serialized" />
</FillStyle>
<Diagram>
<axisy>
<Range SideMarginsEnabled="True"></Range>
</axisy>
<axisx>
<Range SideMarginsEnabled="True"></Range>
</axisx>
</Diagram>
</dxchartsui:WebChartControl>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:GYConnectionString %>"
SelectCommand="SELECT * FROM [cpr]"></asp:SqlDataSource>
</div>
后台代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using DevExpress.XtraCharts;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
Series CategoriesSeries { get { return WebChartControl1.GetSeriesByName("Categories"); } }
Series ProductsSeries { get { return WebChartControl1.GetSeriesByName("Products"); } }
Series CitySeries { get { return WebChartControl1.GetSeriesByName("city"); } }
bool IsCategoriesChart { get { return CategoriesSeries.Visible; } }
bool IsProductsChart { get { return ProductsSeries.Visible; } }
DataView RetrieveCategories()
{
string selectCommand =
"SELECT * from cpr where fid=0";
using (SqlDataSource dataSource = new SqlDataSource(ConfigurationManager.ConnectionStrings["GYConnectionString"].ConnectionString, selectCommand))
{
dataSource.DataSourceMode = SqlDataSourceMode.DataSet;
return (DataView)dataSource.Select(DataSourceSelectArguments.Empty);
}
}
//DataView RetrieveProducts(string id)
//{
// string selectCommand =
// "SELECT * from cpr where fid="+id;
// SqlConnection conn = new SqlConnection();
// using (SqlDataSource dataSource = new SqlDataSource(ConfigurationManager.ConnectionStrings["GYConnectionString"].ConnectionString, selectCommand))
// {
// dataSource.DataSourceMode = SqlDataSourceMode.DataSet;
// return (DataView)dataSource.Select(DataSourceSelectArguments.Empty);
// }
//}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
if (IsCategoriesChart)
{
BindCategories();
InitChartTitle();
}
}
protected void WebChartControl1_CustomCallback(object sender, DevExpress.XtraCharts.Web.CustomCallbackEventArgs e)
{
}
protected void WebChartControl1_ObjectSelected(object sender, HotTrackEventArgs e)
{
if (IsCategoriesChart)
{
SeriesPoint point = e.AdditionalObject as SeriesPoint;
if (point != null)
InitProductsChart(point);
e.Cancel = point == null;
}
else if (IsProductsChart)
{
SeriesPoint point = e.AdditionalObject as SeriesPoint;
if (point != null)
InitcityChart(point);
e.Cancel = point == null;
}
else if (e.HitInfo.InChartTitle)
InitCategoriesChart();
}
void InitChartTitle()
{
WebChartControl1.Titles[0].Text = "counrty";
}
void InitCategoriesChart()
{
CategoriesSeries.Visible = true;
WebChartControl1.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.RightOutside;
WebChartControl1.Legend.AlignmentVertical = LegendAlignmentVertical.Center;
WebChartControl1.Titles[0].Visible = true;
WebChartControl1.Titles[1].Visible = false;
BindCategories();
}
void InitcityChart(SeriesPoint point)
{
CategoriesSeries.Visible = false;
//IsCategoriesChart = false;
ProductsSeries.Visible = false;
CitySeries.Visible = true;
CitySeries.DataFilters[0].Value = (int)((DataRowView)point.Tag)["id"];
//= (int)((DataRowView)point.Tag)["id"];
//this.WebChartControl1.DataBind();
CitySeries.LegendText = point.Argument;
AxisXBase axisX = ((XYDiagramSeriesViewBase)ProductsSeries.View).AxisX;
axisX.Label.Angle = 30;
axisX.Label.Antialiasing = true;
AxisYBase axisY = ((XYDiagramSeriesViewBase)ProductsSeries.View).AxisY;
axisY.Title.Visible = true;
WebChartControl1.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Left;
WebChartControl1.Legend.AlignmentVertical = LegendAlignmentVertical.Top;
WebChartControl1.Titles[0].Visible = false;
WebChartControl1.Titles[1].Visible = true;
}
void InitProductsChart(SeriesPoint point)
{
CategoriesSeries.Visible = false;
//IsCategoriesChart = false;
ProductsSeries.Visible = true;
ProductsSeries.DataFilters[0].Value = (int)((DataRowView)point.Tag)["id"];
//= (int)((DataRowView)point.Tag)["id"];
//this.WebChartControl1.DataBind();
ProductsSeries.LegendText = point.Argument;
AxisXBase axisX = ((XYDiagramSeriesViewBase)ProductsSeries.View).AxisX;
axisX.Label.Angle = 30;
axisX.Label.Antialiasing = true;
AxisYBase axisY = ((XYDiagramSeriesViewBase)ProductsSeries.View).AxisY;
axisY.Title.Visible = true;
WebChartControl1.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Left;
WebChartControl1.Legend.AlignmentVertical = LegendAlignmentVertical.Top;
WebChartControl1.Titles[0].Visible = false;
WebChartControl1.Titles[1].Visible = true;
}
void BindCategories()
{
DataView categories = RetrieveCategories();
CategoriesSeries.DataSource = categories;
}
protected void WebChartControl1_CallbackStateLoad(object sender, DevExpress.XtraCharts.Web.CallbackStateLoadEventArgs e)
{
if (IsCategoriesChart)
BindCategories();
CitySeries.Visible = false;
}
}
主要效果如上图, 当用户点击中国的柱形时候,显示省份的数据,再点击省份,显示市的数据,
代码如下:
<div>
<dxchartsui:WebChartControl ID="WebChartControl1" runat="server"
Height="298px" Width="510px" ClientInstanceName="chart" DiagramTypeName="XYDiagram" OnCallbackStateLoad="WebChartControl1_CallbackStateLoad" OnCustomCallback="WebChartControl1_CustomCallback" OnObjectSelected="WebChartControl1_ObjectSelected" SeriesSorting="Ascending" DataSourceID="SqlDataSource1" >
<SeriesSerializable>
<cc1:Series ArgumentDataMember="cn" LabelTypeName="SideBySideBarSeriesLabel" Name="Categories"
PointOptionsTypeName="PointOptions" SeriesViewTypeName="SideBySideBarSeriesView"
ValueDataMembersSerializable="pr">
<label hiddenserializablestring="to be serialized">
<fillstyle filloptionstypename="SolidFillOptions">
<Options HiddenSerializableString="to be serialized"></Options>
</fillstyle>
</label>
<pointoptions hiddenserializablestring="to be serialized"></pointoptions>
<legendpointoptions hiddenserializablestring="to be serialized"></legendpointoptions>
<view hiddenserializablestring="to be serialized"></view>
</cc1:Series>
<cc1:Series LabelTypeName="SideBySideBarSeriesLabel" Name="Products" ArgumentDataMember="cn" ValueDataMembersSerializable="pr" PointOptionsTypeName="PointOptions"
SeriesViewTypeName="SideBySideBarSeriesView" Visible="False" >
<label hiddenserializablestring="to be serialized">
<fillstyle filloptionstypename="SolidFillOptions">
<Options HiddenSerializableString="to be serialized"></Options>
</fillstyle>
</label>
<datafilters>
<cc1:DataFilter DataType="System.Int32" ColumnName="fid"></cc1:DataFilter>
</datafilters>
<pointoptions hiddenserializablestring="to be serialized"></pointoptions>
<legendpointoptions hiddenserializablestring="to be serialized"></legendpointoptions>
<view hiddenserializablestring="to be serialized"></view>
</cc1:Series>
<cc1:Series ArgumentDataMember="cn" LabelTypeName="SideBySideBarSeriesLabel" Name="city"
PointOptionsTypeName="PointOptions" SeriesViewTypeName="SideBySideBarSeriesView"
ValueDataMembersSerializable="pr" Visible="False">
<label hiddenserializablestring="to be serialized">
<fillstyle filloptionstypename="SolidFillOptions">
<Options HiddenSerializableString="to be serialized"></Options>
</fillstyle>
</label>
<datafilters>
<cc1:DataFilter DataType="System.Int32" ColumnName="fid"></cc1:DataFilter>
</datafilters>
<pointoptions hiddenserializablestring="to be serialized"></pointoptions>
<legendpointoptions hiddenserializablestring="to be serialized"></legendpointoptions>
<view hiddenserializablestring="to be serialized"></view>
</cc1:Series>
</SeriesSerializable>
<ClientSideEvents ObjectHotTracked="function(s, e) {
if(e.hitInfo.inSeries)
{
var a=e.hitObject.name;
if(a=='Categories')
{
var hitInCategory = e.hitInfo.inSeries && e.chart.series[0].visible;
var hitInBackTitle = e.hitInfo.inChartTitle && !e.chart.series[0].visible;
s.SetCursor((hitInCategory || hitInBackTitle) ? 'pointer' : 'default');
}
else if(a=='Products')
{
var hitInCategory = e.hitInfo.inSeries && e.chart.series[1].visible;
var hitInBackTitle = e.hitInfo.inChartTitle && !e.chart.series[1].visible;
s.SetCursor((hitInCategory || hitInBackTitle) ? 'pointer' : 'default');
}
}
}" ObjectSelected="function(s, e) {
if(e.hitInfo.inSeries)
{
var a=e.hitObject.name;
if(a=='Categories')
{
var hitInCategory = e.hitInfo.inSeries && e.chart.series[0].visible;
var hitInBackTitle = e.hitInfo.inChartTitle && !e.chart.series[0].visible;
e.processOnServer = hitInCategory || hitInBackTitle;
}
else if(a=='Products')
{
var hitInCategory = e.hitInfo.inSeries && e.chart.series[1].visible;
var hitInBackTitle = e.hitInfo.inChartTitle && !e.chart.series[1].visible;
e.processOnServer = hitInCategory || hitInBackTitle;
}
}
}
" />
<Titles>
<cc1:ChartTitle>
</cc1:ChartTitle>
<cc1:ChartTitle Alignment="Near" Font="Tahoma, 10pt, style=Underline" Text="Back to the main view..."
Visible="False" TextColor="Blue" Antialiasing="False">
</cc1:ChartTitle>
</Titles>
<Legend AlignmentVertical="Center"></Legend>
<SeriesTemplate LabelTypeName="SideBySideBarSeriesLabel" PointOptionsTypeName="PointOptions"
SeriesViewTypeName="SideBySideBarSeriesView" SeriesPointsSorting="Ascending">
<PointOptions HiddenSerializableString="to be serialized">
</PointOptions>
<Label HiddenSerializableString="to be serialized">
<FillStyle FillOptionsTypeName="SolidFillOptions">
<Options HiddenSerializableString="to be serialized" />
</FillStyle>
</Label>
<LegendPointOptions HiddenSerializableString="to be serialized">
</LegendPointOptions>
<View HiddenSerializableString="to be serialized">
</View>
</SeriesTemplate>
<FillStyle FillOptionsTypeName="SolidFillOptions">
<Options HiddenSerializableString="to be serialized" />
</FillStyle>
<Diagram>
<axisy>
<Range SideMarginsEnabled="True"></Range>
</axisy>
<axisx>
<Range SideMarginsEnabled="True"></Range>
</axisx>
</Diagram>
</dxchartsui:WebChartControl>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:GYConnectionString %>"
SelectCommand="SELECT * FROM [cpr]"></asp:SqlDataSource>
</div>
后台代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using DevExpress.XtraCharts;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
Series CategoriesSeries { get { return WebChartControl1.GetSeriesByName("Categories"); } }
Series ProductsSeries { get { return WebChartControl1.GetSeriesByName("Products"); } }
Series CitySeries { get { return WebChartControl1.GetSeriesByName("city"); } }
bool IsCategoriesChart { get { return CategoriesSeries.Visible; } }
bool IsProductsChart { get { return ProductsSeries.Visible; } }
DataView RetrieveCategories()
{
string selectCommand =
"SELECT * from cpr where fid=0";
using (SqlDataSource dataSource = new SqlDataSource(ConfigurationManager.ConnectionStrings["GYConnectionString"].ConnectionString, selectCommand))
{
dataSource.DataSourceMode = SqlDataSourceMode.DataSet;
return (DataView)dataSource.Select(DataSourceSelectArguments.Empty);
}
}
//DataView RetrieveProducts(string id)
//{
// string selectCommand =
// "SELECT * from cpr where fid="+id;
// SqlConnection conn = new SqlConnection();
// using (SqlDataSource dataSource = new SqlDataSource(ConfigurationManager.ConnectionStrings["GYConnectionString"].ConnectionString, selectCommand))
// {
// dataSource.DataSourceMode = SqlDataSourceMode.DataSet;
// return (DataView)dataSource.Select(DataSourceSelectArguments.Empty);
// }
//}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
if (IsCategoriesChart)
{
BindCategories();
InitChartTitle();
}
}
protected void WebChartControl1_CustomCallback(object sender, DevExpress.XtraCharts.Web.CustomCallbackEventArgs e)
{
}
protected void WebChartControl1_ObjectSelected(object sender, HotTrackEventArgs e)
{
if (IsCategoriesChart)
{
SeriesPoint point = e.AdditionalObject as SeriesPoint;
if (point != null)
InitProductsChart(point);
e.Cancel = point == null;
}
else if (IsProductsChart)
{
SeriesPoint point = e.AdditionalObject as SeriesPoint;
if (point != null)
InitcityChart(point);
e.Cancel = point == null;
}
else if (e.HitInfo.InChartTitle)
InitCategoriesChart();
}
void InitChartTitle()
{
WebChartControl1.Titles[0].Text = "counrty";
}
void InitCategoriesChart()
{
CategoriesSeries.Visible = true;
WebChartControl1.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.RightOutside;
WebChartControl1.Legend.AlignmentVertical = LegendAlignmentVertical.Center;
WebChartControl1.Titles[0].Visible = true;
WebChartControl1.Titles[1].Visible = false;
BindCategories();
}
void InitcityChart(SeriesPoint point)
{
CategoriesSeries.Visible = false;
//IsCategoriesChart = false;
ProductsSeries.Visible = false;
CitySeries.Visible = true;
CitySeries.DataFilters[0].Value = (int)((DataRowView)point.Tag)["id"];
//= (int)((DataRowView)point.Tag)["id"];
//this.WebChartControl1.DataBind();
CitySeries.LegendText = point.Argument;
AxisXBase axisX = ((XYDiagramSeriesViewBase)ProductsSeries.View).AxisX;
axisX.Label.Angle = 30;
axisX.Label.Antialiasing = true;
AxisYBase axisY = ((XYDiagramSeriesViewBase)ProductsSeries.View).AxisY;
axisY.Title.Visible = true;
WebChartControl1.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Left;
WebChartControl1.Legend.AlignmentVertical = LegendAlignmentVertical.Top;
WebChartControl1.Titles[0].Visible = false;
WebChartControl1.Titles[1].Visible = true;
}
void InitProductsChart(SeriesPoint point)
{
CategoriesSeries.Visible = false;
//IsCategoriesChart = false;
ProductsSeries.Visible = true;
ProductsSeries.DataFilters[0].Value = (int)((DataRowView)point.Tag)["id"];
//= (int)((DataRowView)point.Tag)["id"];
//this.WebChartControl1.DataBind();
ProductsSeries.LegendText = point.Argument;
AxisXBase axisX = ((XYDiagramSeriesViewBase)ProductsSeries.View).AxisX;
axisX.Label.Angle = 30;
axisX.Label.Antialiasing = true;
AxisYBase axisY = ((XYDiagramSeriesViewBase)ProductsSeries.View).AxisY;
axisY.Title.Visible = true;
WebChartControl1.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Left;
WebChartControl1.Legend.AlignmentVertical = LegendAlignmentVertical.Top;
WebChartControl1.Titles[0].Visible = false;
WebChartControl1.Titles[1].Visible = true;
}
void BindCategories()
{
DataView categories = RetrieveCategories();
CategoriesSeries.DataSource = categories;
}
protected void WebChartControl1_CallbackStateLoad(object sender, DevExpress.XtraCharts.Web.CallbackStateLoadEventArgs e)
{
if (IsCategoriesChart)
BindCategories();
CitySeries.Visible = false;
}
}
相关文章推荐
- DEVExpress XtraReport报表制作过程中绑定数据源的XRControl对象在值为0时不显示功能,通过代码自动实现
- Devexpress 控件做水晶报表小试牛刀(Master-Detail)!!!
- 【水晶报表实战指南】使用分组实现超多列分段同页及分页显示
- 水晶报表中实现任意指定字段显示
- 一起学习水晶报表之拉模式【Winform中实现报表显示数据】(课程4)
- 一起学习水晶报表之推模式【强类型的DataSet实现显示报表数据】(课程6)
- [转]在水晶报表中实现任意选择指定字段显示
- 关于水晶报表多表连接显示问题的实现!
- [转] 在水晶报表中实现任意选择指定字段显示 (vb.net vs2003) [来自--http://blog.csdn.net/rainbowsoftware/]
- 在水晶报表中实现任意选择指定字段显示 (vb.net vs2003)
- 一起学习水晶报表之推模式【强类型的DataSet实现显示报表数据】(课程7)
- [转]在水晶报表中实现任意选择指定字段显示
- 大数据量下水晶报表的实现及显示过程中的进度条显示讨论
- 在水晶报表中实现任意选择指定字段显示
- 在水晶报表中实现任意选择指定字段显示 (阿泰)
- 基于DevExpress开发的GridView如何实现一列显示不同的控件类型
- 在水晶报表中实现任意选择指定字段显示(补充)-格线的实现
- 一起学习水晶报表之【如何实现Web网页显示水晶报表和绑定数据】(课程1)
- 在水晶报表中实现任意选择指定字段显示-模板及C#升级版
- [水晶报表]实现RDLC 网格显示