如何动态创建水晶报表

现在很多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);
   }     
  }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值