您的位置:首页 > 其它

使用Linq作为rdlc报表的数据源

2010-01-25 23:26 621 查看
平时做报表大都使用ADO.NET填充数据集来处理,今天尝试了下用Linq来做,也很方便,不过稍微费了一番周折。

示例代码下载

一、准备工作

1、Northwind数据库

2、开发环境:VS2008 + SQL Server 2008

3、本测试采用网页形式,WinForm大同小异,感兴趣的朋友可以自己测试下

二、制作报表

  这次先用rdlc测试,下次改用水晶报表试试。报表的布局还是很简单的,由于是测试,只放了很少的控件:

代码

private void fnBuildDataSource(string v_strCountry)
{
NorthwindDataContext ctx = new NorthwindDataContext();
var datasource = from c in ctx.sp_LinqTest(v_strCountry)
orderby c.CustomerID
select c;

ReportParameter rpCountry = new ReportParameter("p_Country", v_strCountry);
this.rvNorthwind.LocalReport.SetParameters(new ReportParameter[] { rpCountry });
this.rvNorthwind.LocalReport.DataSources.Add(new ReportDataSource("sp_LinqTestResult", datasource.ToList()));
this.rvNorthwind.LocalReport.Refresh();
}

最终效果图如下:



小结:

  用Linq做数据源虽然可以实现,但是相对于传统的DataSet,其效率值得考虑,尤其当数据量很大时,报表的反应速度尤其重要,现在微软对Linq做数据源的支持还不够“官方”,期待VS2010中有何新特性吧!

本次我也留下了一些疑问:

1、不用存储过程(或视图)是否可行呢?

2、能否从后台编程获取RDLC的控件实例?

3、能否操作RDL语言来嵌入Linq呢?

4、如果Linq返回了匿名类型该如何拖拽呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: