2012-07-26 59 views
1

我正在使用WPF生成Crystal Report查看器,并且我能够在报表查看器中加载数据。但是当我试图创建一个事件来动态刷新报表时,数据无法刷新。Crystal报表无法刷新数据

基本上我做的是创造与MSSQL服务器enter image description here

然后生成一个水晶报表文件连接数据集:enter image description here

然后尝试将数据导入到在主窗口的Crystal报表查看器。 下面是代码:

public partial class MainWindow: Window 
{ 
    DataSet1TableAdapters.BordierSheetTableAdapter TA = new  DataSet1TableAdapters.BordierSheetTableAdapter(); 
    ReportDocument reportDoc = new ReportDocument(); 
    public MainWindow() 
    { 
     InitializeComponent(); 
     Data_Binding(); 
    } 
    public void button2_Click(object sender, RoutedEventArgs e) 
    { 
     reportDoc.Refresh(); 
     crystalReportsViewer1.ViewerCore.RefreshReport(); 
    } 
    void Data_Binding() 
    { 

     DataSet empDataSet = new DataSet(); 

     using (SqlConnection conn = new SqlConnection()) 
     { 
      conn.ConnectionString = "Data Source=YATONGHOU\\SQLEXPRESS;Initial Catalog=messagedb;Integrated Security=True"; 
      conn.Open(); 


      string sqlStr = "select * from BordierSheet"; 
      SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlStr,conn); 

      dataAdapter.Fill(empDataSet, "BordierSheet"); 
     } 

     string reportDataSource = @"C:\\Users\\yatong\\Work\\LogAnalytics\\BordierSheetReport\\BordierSheetReport\\CrystalReport1.rpt"; 

     reportDoc.Load(reportDataSource); 
     reportDoc.SetDataSource(empDataSet); 

     this.crystalReportsViewer1.ViewerCore.ReportSource = reportDoc; 

    } 
} 

当我更新我的数据的基础上,然后单击窗口()这触发button2_Click(对象发件人,RoutedEventArgsË功能)的按钮,没有数据已被更新。 那么有人可以帮助我吗? 非常感谢。

+0

刷新报告的代码在哪里?什么不行? – LittleBobbyTables 2012-07-26 19:55:43

+0

它在函数button2_Click(object sender,RoutedEventArgs e)中。 Refresh方法不起作用。 – Lillian 2012-07-26 19:59:45

+0

它会抛出错误还是根本不刷新?您是否在刷新报告之前尝试调用Data_Binding? – LittleBobbyTables 2012-07-26 20:02:44

回答

1

您是否尝试过这样做的:

reportDoc.Refresh() 

做数据加载后?

+0

与我在button2_Click函数中做的事情不一样吗? – Lillian 2012-07-26 20:29:52

+0

我会在数据绑定操作结束时执行此操作。 CR很挑剔。 – Josh 2012-07-26 20:55:18

3

试试这个:

reportDoc.Load(reportDataSource); 
reportDoc.SetDataSource(empDataSet); 
this.crystalReportsViewer1.ViewerCore.ReportSource = reportDoc; 
crystalReportsViewer1.RefreshReport(); 
+2

欢迎来到Stack Overflow!你能否请你的答案给出解释为什么这个代码回答这个问题?仅限代码答案[不鼓励](http://meta.stackexchange.com/questions/148272),因为他们没有教导解决方案。 – DavidPostill 2015-04-11 06:14:36

+0

谢谢,你救了我的一天! – 2018-01-23 13:15:47

0

删除数据源,然后重新添加,如:

if (reportViewer1.LocalReport.DataSources.Count > 0) 
     reportViewer1.LocalReport.DataSources.RemoveAt(0); 

    reportViewer1.LocalReport.DataSources.Add(new ReportDataSource() 
{ 
      Name = "ds", 
      Value = MyDataSource 
    }); 
0

尝试this..this工作!

转到Crystal Report设计>文件>取消选中用数据保存数据。

这就是它然后再保存..它会工作。