我用VS 2008编写了一个C#程序,使用内置的报告查看器并在本地处理报告。
当查看报告时,我想要替换当前的rdlc文件并刷新报告,而不关闭包含报告查看器的报告表单。
我已经检查过确保文件生成正确。如果我关闭具有报告查看器的表单并重新打开它,则会显示新文件信息。我只是无法弄清如何重新加载报告查看器而不关闭父表单。
以下是我已经尝试过的内容。我没有收到错误消息。报告似乎刷新了,但实际上它只是显示了我已经在查看的内容。新的RDLC文件没有被加载。
当查看报告时,我想要替换当前的rdlc文件并刷新报告,而不关闭包含报告查看器的报告表单。
我已经检查过确保文件生成正确。如果我关闭具有报告查看器的表单并重新打开它,则会显示新文件信息。我只是无法弄清如何重新加载报告查看器而不关闭父表单。
以下是我已经尝试过的内容。我没有收到错误消息。报告似乎刷新了,但实际上它只是显示了我已经在查看的内容。新的RDLC文件没有被加载。
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);
}
}