最近公司接了一个项目,要给客户做许多报表,并且是中国式的报表,本人就用了c#+水晶报表10进行了开发,但是中间遇到了一个问题,”
动态设置水晶报表的数据源后,打印、导出、查找等按钮不能用,即使用水晶报表的工具栏时,出现的不是打印、导出、查找的结果,而是一张空白”。出现这个问题挺郁闷的,于是在网上也查找了一番,但是网友们也都遇见到这个问题,都 没有给出解决的办法。无奈之下,本人专门研究了一番,最后
费了十牛三虎之力,终于找到了解决的办法,下面列出来,以飨读者,希望能给遇到此问题的朋友一定的帮助。
WEB
窗体中有两个控件,
CrystalReportViewer1
和
CrystalReportSource1
,
数据源:
Dataset
代码
:
protected
CrystalDecisions.Web.CrystalReportViewer Crv;
ReportDocument ReportDoc=new ReportDocument() ;
if
(!IsPostBack)
{
SqlConnection sqlConnData=new SqlConnection(ConfigurationSettings.AppSettings["dsn"]) ;
sqlConnData.Open();
string
str="select * from brigderoad where (station='"+UserStr+"') or (year='"+yearStr+"') ";
//
查询特定的表
SqlDataAdapter MyAdapter=new SqlDataAdapter (str,sqlConnData);
addressDS ds=new addressDS();
MyAdapter.Fill (ds,"brigderoad");//
绑定到数据源
string FilePath=Server.MapPath("report/bridgeCrR.rpt"); //
指定到特定的报表
if (!ReportDoc.IsLoaded )
ReportDoc.Load(FilePath);
ReportDoc.SetDataSource(ds);
Crv.ReportSource=ReportDoc;
}
上面就是常见的代码,并且代码不存在错误,那读者要问了,上面没有错误,但是到预览报表时,要打印、导出、查找特定的页面时为什么还是空白页面呢?
哈哈,下面将解决这个问题,请往下看
if
(!IsPostBack)
{
//
}
SqlConnection sqlConnData=new SqlConnection(ConfigurationSettings.AppSettings["dsn"]) ;
sqlConnData.Open();
string
str="select * from brigderoad where (station='"+UserStr+"') or (year='"+yearStr+"') ";
//
查询特定的表
SqlDataAdapter MyAdapter=new SqlDataAdapter (str,sqlConnData);
addressDS ds=new addressDS();
MyAdapter.Fill (ds,"brigderoad");//
绑定到数据源
string
FilePath=Server.MapPath("report/bridgeCrR.rpt"); //
指定到特定的报表
if
(!ReportDoc.IsLoaded )
ReportDoc.Load(FilePath);
ReportDoc.SetDataSource(ds);
Crv.ReportSource=ReportDoc;
看到了吧,只需要
if
语句后的代码放在
if
(!IsPostBack){
//}
的后面就可以了,呵呵,啰唆了那么多,就这么简单。
Ispostback指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问,当执行完
if
(!IsPostBack){
//}
之后有比讯把所查询的表重新绑定数据源,这样报表中有了数据,所以水晶报表的工具栏就可以用了。
总结
:
if (!IsPostBack){ //}执行之后要把表重新绑定到数据源,这样才不会错误。
转自:http://blog.csdn.net/matail/article/details/1789489