SQL Reporting Services报告仅在第二次单击时加载

问题描述 投票:4回答:4

我有一个本地的.rdlc报告,可以点击按钮显示,但由于某种原因,报告只显示第二个按钮点击事件。我不知道为什么报告没有显示在第一个按钮单击...这是我调用按钮的单击事件的功能。

private void ShowReport(string accountingCompanyId, string companyId, string approvalUnitId, DateTime startDate, DateTime finishDate, string supplierId,
                    string documentNumber, string documentType, string documentState, string costCenterId, string chargingKeyId,
                    string dim1Value, string dim1Description, string dim1Id, string dim2Value, string dim2Description, string dim2Id,
                    string dim3Value, string dim3Description, string dim3Id, bool showDetails) {

        //this.ReportViewer1.Reset();

        //Set report mode for local processing.
        this.ReportViewer1.ProcessingMode = ProcessingMode.Local;

        ISettingsReader settingsReader = SettingsReaderFactory.Instance.CreateSettingsReader();
        this.ReportViewer1.LocalReport.ReportPath = settingsReader.GetSetting("ReportViewer", "FinancialReportPath" + (showDetails ? "" : "Small"), true, null);

        ReportsBL reports = new ReportsBL();

        // Clear out any previous datasources.
        this.ReportViewer1.LocalReport.DataSources.Clear();

        // Load the company dataSource.
        DataTable company = reports.GetCompanyDataSet(accountingCompanyId).Tables[0];
        ReportDataSource dataSourceCompany = new ReportDataSource(company.TableName, company);
        this.ReportViewer1.LocalReport.DataSources.Add(dataSourceCompany);

        // Load the dataSource.
        DataTable report = reports.GetReportFinanceiroSmallDataSet(companyId, startDate, finishDate, chargingKeyId, costCenterId, documentNumber, documentType, dim1Value, dim2Value, dim3Value, dim1Id, dim2Id, dim3Id, supplierId, approvalUnitId, documentState, accountingCompanyId).Tables[0];
        ReportDataSource dataSourceReport = new ReportDataSource(report.TableName, report);
        this.ReportViewer1.LocalReport.DataSources.Add(dataSourceReport);

        this.ReportViewer1.LocalReport.Refresh();

        this.pnlReport.Visible = true;
    }

奇怪的是,如果我取消注释this.ReportViewer.Reset();然后,无论我生成的点击次数如何,报告都不会显示...有人知道这是否正常?如何解决这个问题呢?提前致谢,

visual-studio-2010 reporting-services asp.net-3.5
4个回答
3
投票

我想问题可能是在呈现页面后触发了click事件。尝试在Page_Load事件中调用该方法。

protected void Page_Load(object sender, EventArgs e)
{
    if (IsCallback)
    {
        ShowReport(
            // params
        );
    }
}

如果可行,您知道它与执行顺序有关。


2
投票

我从来没有调用过ReportViewer.DataBind();以下是我通常做的事情:

IEnumerable<ReportClass> ds = DataTranslator.GetReportData(Int64.Parse(<someId>));
report.LocalReport.ReportPath = "<some_path_to_report.rdlc>";
report.LocalReport.DataSources.Add(new ReportDataSource("DataSet", ds));
report.Visible = true;
report.LocalReport.Refresh();

2
投票

经过大量的反复试验,我通过在pageload事件上调用databind()方法来实现它。页面加载数据绑定(没有设置数据源)后,后续按钮单击开始按预期工作。

我包含了代码以防其他人遇到此错误。 (很想知道为什么我需要在页面加载中进行数据绑定...)

更新2

我终于找到了问题...原来.rdlc是从旧的2005.rdl报告中迁移出来的,并且新的.rdlc包含旧的报告参数+ sql,它在某种程度上搞乱了报告的加载。我删除了未使用的报告参数+ sql后,一切都开始正常工作......我已经更新了下面的代码,以反映我现在在项目中使用的内容......

protected void Page_Load(object sender, System.EventArgs e) {

}

protected void btGenStats_Click(object sender, System.EventArgs e) {

    ...

    this.ShowReport(accountingCompanyId, companyId, approvalUnitId, startDate, finishDate, supplierId, documentNumber, documentType, documentState,
                    costCenterId, chargingKeyId, dim1, dim1Desc, dim1Id, dim2, dim2Desc, dim2Id, dim3, dim3Desc, dim3Id, showDetails);
}

private void ShowReport(string accountingCompanyId, string companyId, string approvalUnitId, DateTime startDate, DateTime finishDate, string supplierId, string documentNumber, string documentType, string documentState, string costCenterId, string chargingKeyId, string dim1Value, string dim1Description, string dim1Id, string dim2Value, string dim2Description, string dim2Id, string dim3Value, string dim3Description, string dim3Id, bool showDetails) {

    this.ReportViewer1.Reset();

    //Set report mode for local processing.
    this.ReportViewer1.ProcessingMode = ProcessingMode.Local;

    ISettingsReader settingsReader = SettingsReaderFactory.Instance.CreateSettingsReader();
    string reportPath = settingsReader.GetSetting("ReportViewer", "FinancialReportPath"+( showDetails? "" : "Small" ), true, null);
    this.ReportViewer1.LocalReport.ReportPath = Server.MapPath(reportPath);

    ReportsBL reports = new ReportsBL();

    // Clear out any previous datasources.
    this.ReportViewer1.LocalReport.DataSources.Clear();

    // Load the company dataSource.
    DataTable company = reports.GetCompanyDataSet(accountingCompanyId).Tables[0];
    ReportDataSource dataSourceCompany = new ReportDataSource(company.TableName, company);
    this.ReportViewer1.LocalReport.DataSources.Add(dataSourceCompany);

    if (showDetails)
    {
        // Load the dataSource.
        DataTable report = reports.GetReportFinanceiroDataSet(companyId, approvalUnitId, startDate, finishDate, chargingKeyId, costCenterId, documentNumber, documentType, dim1Value, dim2Value, dim3Value, dim1Id, dim2Id, dim3Id, supplierId, documentState, accountingCompanyId).Tables[0];
        ReportDataSource dataSourceReport = new ReportDataSource(report.TableName, report);
        this.ReportViewer1.LocalReport.DataSources.Add(dataSourceReport);
    }
    else
    {
        // Load the dataSource.
        DataTable report = reports.GetReportFinanceiroSmallDataSet(companyId, approvalUnitId, startDate, finishDate, chargingKeyId, costCenterId, documentNumber, documentType, dim1Value, dim2Value, dim3Value, dim1Id, dim2Id, dim3Id, supplierId, documentState, accountingCompanyId).Tables[0];
        ReportDataSource dataSourceReport = new ReportDataSource(report.TableName, report);
        this.ReportViewer1.LocalReport.DataSources.Add(dataSourceReport);
    }

    this.pnlReport.Visible = true;
}

1
投票

试试这段代码:

  protected void btnSubmit_Click(object sender, EventArgs e)
        {
            string pstrType;
            pstrType = Request.QueryString["Type"];           
            LoadReport();
        }

        public class CustomReportCredentials : Microsoft.Reporting.WebForms.IReportServerCredentials
        {
            // local variable for network credential.
            private string _UserName;
            private string _PassWord;
            private string _DomainName;
            public CustomReportCredentials(string UserName, string PassWord, string DomainName)
            {
                _UserName = UserName;
                _PassWord = PassWord;
                _DomainName = DomainName;
            }
            public System.Security.Principal.WindowsIdentity ImpersonationUser
            {
                get
                {
                    return null;  // not use ImpersonationUser
                }
            }
            public System.Net.ICredentials NetworkCredentials
            {
                get
                {
                    // use NetworkCredentials
                    return new NetworkCredential(_UserName, _PassWord, _DomainName);
                }
            }
            public bool GetFormsCredentials(out Cookie authCookie, out string user, out string password, out string authority)
            {
                // not use FormsCredentials unless you have implements a custom autentication.
                authCookie = null;
                user = password = authority = null;
                return false;
            }
        }

        void LoadReport()
        {
            string strCompanyName = objSession.SelCompanyName;
            string strHeading = "";
            string strBranchName = objSession.SelBranchName;
            rptvwMain.ProcessingMode = ProcessingMode.Remote;
            rptvwMain.ServerReport.ReportServerCredentials = new CustomReportCredentials(AppConfig.ReportServerUserName, AppConfig.ReportServerPassword, AppConfig.ReportServerDomain);
            string strReportServerUrl = AppConfig.ReportServerUrl + AppConfig.ReportServerFolder;
            rptvwMain.ServerReport.ReportServerUrl = new Uri(strReportServerUrl);
            List<ReportParameter> parameters = new List<ReportParameter>();
    if (pstrType == "OB")
            {
                strHeading = "Ledger Opening Balance";
                rptvwMain.ServerReport.ReportPath = "/Account/OpeningBalance";
            }


            parameters.Add(new ReportParameter("FyId", Convert.ToInt16(objSession.FyId).ToString()));
            parameters.Add(new ReportParameter("AccountGroupId", cmbAccountGroup.SelectedValue));
            parameters.Add(new ReportParameter("LedgerId", cmbLedgerId.SelectedValue));
            parameters.Add(new ReportParameter("BranchId", Convert.ToInt64(objSession.BranchId).ToString()));
            parameters.Add(new ReportParameter("StDate", Convert.ToDateTime(RadDtpFromDate.SelectedDate).ToString()));
            parameters.Add(new ReportParameter("EnDate", Convert.ToDateTime(RadDtpToDate.SelectedDate).ToString()));
            parameters.Add(new ReportParameter("CompanyName", strCompanyName.ToString()));
            parameters.Add(new ReportParameter("BranchName", strBranchName.ToString()));
            parameters.Add(new ReportParameter("Heading",strHeading.ToString()));
            rptvwMain.ServerReport.SetParameters(parameters);

            rptvwMain.ServerReport.SetDataSourceCredentials(new[] { new DataSourceCredentials() { Name =AppConfig.ReportServerDataSource , UserId = AppConfig.ReportServerDSUserName, Password = AppConfig.ReportServerDSPassword } });
            rptvwMain.ShowZoomControl = true;
            rptvwMain.ServerReport.Refresh();
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.