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