现在很多xdjm在问这个问题,其实网上也有相关的这样的文章. 比人不才,弄各简单的例子,工大家参考.从报表想到建的就不说了,只说一下用dataset动态生成数据集再关联到报表的情况.
假设我要现在美国证券交易所上市公司的比例情况,也就是各个国家上市公司的数量,如你数据库中的数据是:
USA 7303
CAN 253
HK 52
CHA 80
UK 65
......................
现在我要将其显示成一个饼图(偶认为是最简单的图表)
1>先在你项目中 add->newitem->dataset, 在生成的dataset.xsd文件中添加一个element相,取名datatable(就是你的表名),要与你数据库中查出的表名相同.添加字段countryId,companyCount(也要与你数据库查出的相同).
build一下你的project,这样在报表中才能找到你要的数据集
2>建水晶报表(选择空白报表)
右键->数据库->添加/移除 数据库->项目数据->ado.net 找到刚才你生成的数据集,选择即可. 这样跟你对应的空数据集就加到了报表中,当然这时候还没有数据与之关联,要在后台加数据.
3>后台代码
调用下面这个函数就可以
void DisplayChart()
{
try
{
ReportDocument oRpt=new ReportDocument();
EdgarDbSourceData edgar = new EdgarDbSourceData();
string FilePath = "";
FilePath=Server.MapPath("CrystalReports//WeeklyFilingProcess.rpt");
// load report
if(!oRpt.IsLoaded)
oRpt.Load(FilePath);
DataSet ds = ...............;
ds.Tables[0].TableName = "datatable"; //要与你dataset中的相同
if(ds.Tables.Count==0)
return;
int count = ds.Tables[0].Rows.Count;
if(count==0)
{
CrystalReportViewer1.Visible = false;
lblRemark.Text = "No data selected";
return;
}
// data bind
oRpt.SetDataSource(ds.Tables[0]);
CrystalReportViewer1.ReportSource=oRpt;
CrystalReportViewer1.DataBind();
CrystalReportViewer1.Visible = true;
CrystalReportViewer1.RefreshReport();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}