ASP.net ReportViewer: после DrillThrough кнопка "Вернуться к родителю" показывает пустой результат

У меня есть рабочий RDL в ReportViewer, Я добавил функцию сквозного просмотра, чтобы при нажатии на одну из строк reportviewer переход к дочернему отчету с правильными параметрами, переданными из родительского отчета дочернему отчету.

protected void ReportViewer1_Drillthrough(object sender, DrillthroughEventArgs e)
{
    showDrill(e);
}

private void showDrill(DrillthroughEventArgs e)
{
    ReportViewer1.Reset();
    ReportParameterInfoCollection DrillParams = e.Report.GetParameters();
    LocalReport localreport = (LocalReport)e.Report;

    using (SqlConnection con = new SqlConnection(connStr))
    {

        using (SqlCommand cmd = new SqlCommand("sp_fieldTableMap", con))
        {
            DataTable dtable = new DataTable();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandTimeout = 30;
            cmd.Parameters.AddWithValue("@inputRpt", "RPT00025");
            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            adp.Fill(dtable);
            int txtCount = 0;
            sqlFieldList.Clear();
            aspFldList.Clear();
            foreach (DataRow dr in dtable.Rows)
            {
                sqlFieldList.Add(dr["SqlParameter"].ToString().Trim());
                aspFldList.Add(dr["AspId"].ToString().Trim());
                if (rptDs == "")
                {
                    rptDs = dr["RptDataSet"].ToString().Trim();
                }
                rptSp = dr["RptSp"].ToString().Trim();
                rptFname = dr["RptFname"].ToString().Trim();
                txtCount++;
            }
        }
    }

    DataTable dt = getDrillData(DrillParams);
    ReportViewer1.ProcessingMode = ProcessingMode.Local;

    ReportDataSource rds = new ReportDataSource(rptDs, dt);
    localreport.DataSources.Clear();
    localreport.DataSources.Add(rds);

    List<ReportParameter> paramList = new List<ReportParameter>();
    int paramCount = 0;

    foreach (ReportParameterInfo d in DrillParams)
    {
        if (d.Values[0].ToString().Trim() == "")
        {
            paramList.Add(new ReportParameter(d.Name, "ALL"));
        }
        else
        {
            paramList.Add(new ReportParameter(d.Name, d.Values[0].ToString().Trim()));
        }
        paramCount++;
    }
    localreport.SetParameters(paramList);
    localreport.Refresh();            
}



private DataTable getDrillData(ReportParameterInfoCollection DrillParams)
{
    DataTable dtab = new DataTable();

    using (SqlConnection cn = new SqlConnection(connStr))
    {
        SqlCommand cmd = new SqlCommand(rptSp, cn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandTimeout = 0;
        foreach (ReportParameterInfo d in DrillParams)
        {
            if (d.Values[0].ToString().Trim() == "")
                {
                    cmd.Parameters.AddWithValue("@" + d.Name, "ALL");
                }
                else
                {
                    cmd.Parameters.AddWithValue("@" + d.Name, d.Values[0].ToString().Trim());
                }
        }

        SqlDataAdapter adp = new SqlDataAdapter(cmd);
        adp.SelectCommand.CommandTimeout = 0;
        adp.Fill(dtab);
    }

    return dtab;
}

Эта проблема:

reportviewer предоставляет кнопку "Вернуться к родительскому отчету" по умолчанию, которая при нажатии возвращает пустой экран в результате. Я прочитал, что вы также можете использовать кнопку "Назад" в браузере, но это не работает. Итак, как мне реализовать кнопку возврата, чтобы исходный родительский отчет не нужно было генерировать снова. Благодарю.

0 ответов

Другие вопросы по тегам