2012-07-26 91 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設計>文件>取消選中用數據保存數據。

這就是它然後再保存..它會工作。