Tôi đã viết chương trình C# sử dụng VS 2008 sử dụng Trình xem báo cáo được xây dựng và xử lý báo cáo cục bộ.Tải lại và làm mới Trình xem báo cáo dựa trên Tệp RDLC mới
Khi báo cáo được xem Tôi muốn thay thế tệp rdlc hiện tại bằng một tệp mới và làm mới báo cáo mà không đóng biểu mẫu báo cáo chứa trình xem báo cáo.
Tôi đã kiểm tra để đảm bảo tệp đang được tạo đúng cách. Nếu tôi đóng biểu mẫu bằng trình xem báo cáo và mở nó lại, thông tin tệp mới sẽ hiển thị. Tôi chỉ không thể tìm ra cách tải lại trình xem báo cáo mà không đóng biểu mẫu gốc.
Dưới đây là những gì tôi đã thử. Tôi không nhận được thông báo lỗi. Báo cáo xuất hiện để làm mới, nhưng nó thực sự chỉ cho tôi thấy những gì tôi đã xem xét. Tệp RDLC mới không được tải.
private void BtnRefreshRpt_Click(object sender, EventArgs e)
{
try
{
GenerateNewRDLC GN = new GenerateNewRDLC();
GN.generateFile(); /*this part definitely works*/
SqlConnection conReport = new SqlConnection (ConfigurationManager.ConnectionStrings["Connection String Info"].ConnectionString);
SqlCommand cmdReport = new SqlCommand();
SqlDataReader drReport;
DataSet dsReport = new AdvEdgeDataSet();
conReport.Open();
cmdReport.CommandType = CommandType.Text;
cmdReport.Connection = conReport;
cmdReport.CommandText = strRptCriteria;
drReport = cmdReport.ExecuteReader();
dsReport.Tables[0].Load(drReport);
drReport.Close();
conReport.Close();
reportViewer1.LocalReport.ReportPath = strRptResource.ToString();
ReportDataSource rds = new ReportDataSource();
rds.Name = strRptDataSource;
rds.Value = dsReport.Tables[0];
reportViewer1.LocalReport.DataSources.Add(rds);
reportViewer1.RefreshReport();
reportViewer1.SetDisplayMode(DisplayMode.PrintLayout);
//this.reportViewer1.RefreshReport();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Điều này hiệu quả. Cảm ơn yo rất nhiều vì sự giúp đỡ. Rất nhiều đánh giá cao. Tôi vừa thêm: this.ReportViewer.Reset(); sau mã "tạo tệp mới" của tôi và trước mã kết nối sql của tôi. Đây là lời cảm ơn hoàn hảo. J –
Tôi đã gặp vấn đề tương tự đối với các báo cáo từ xa. Câu trả lời này vẫn được áp dụng. Cảm ơn! – LOAS