问题
I have created a local .rdlc report within my ASP.NET web form application.
I want to load a report using the ReportViewer Control. I am getting the data for my Report DataSet using a stored procedure in the database. The stored procedure needs a parameter to return a single data row from the table. I want to be able to pass this parameter to the stored procedure programmatically so that the report will load the data.
How do I accomplish this?
回答1:
Your reportViewer on ASPX
<rsweb:ReportViewer ID="ReportViewer1" runat="server" SizeToReportContent="True">
</rsweb:ReportViewer>
Method to get data set
private DataTable GetSPResult()
{
DataTable ResultsTable = new DataTable();
SqlConnection conn = new SqlConnection(ConfigurationManager
.ConnectionStrings["connectionString"].ConnectionString);
try
{
SqlCommand cmd = new SqlCommand("yourStorePorcedure", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", 1);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(ResultsTable);
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
finally
{
if (conn != null)
{
conn.Close();
}
}
return ResultsTable;
}
Bind result to reportviewer
DataTable dt = GetSPResult();
ReportViewer1.Visible = true;
ReportViewer1.LocalReport.ReportPath = "Report1.rdlc";
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt));
回答2:
DataTable dtval = new DataTable();
//Add parameter
SqlParameter[] param = new SqlParameter[5];
if (!String.IsNullOrEmpty(ddlcust.SelectedValue))
{ param[0] = new SqlParameter("@custnam", ddlcust.SelectedValue); }
else { param[0] = new SqlParameter("@custnam", DBNull.Value); }
if (!string.IsNullOrEmpty(ddlproj.SelectedValue))
{ param[1] = new SqlParameter("@projid", Convert.ToInt32(ddlproj.SelectedValue)); }
else { param[1] = new SqlParameter("@projid", DBNull.Value); }
if (!string.IsNullOrEmpty(ddlvisittype.SelectedItem.Text))
{ param[2] = new SqlParameter("@vtype", ddlvisittype.SelectedItem.Text); }
else { param[2] = new SqlParameter("@vtype", DBNull.Value); }
param[3] = new SqlParameter("@frmdt", txtfrmdate.Text);
param[4] = new SqlParameter("@todt", txttodate.Text);
//Call storedprocedure with parameter
dtval = objDal.Getvalue("[Usp_CRMRpt]", param);
if (dtval != null && dtval.Rows.Count > 0)
{
//Load to reportviewer
RptCrm.Visible = true;
RptCrm.LocalReport.DataSources.Clear();
ReportDataSource rds = new ReportDataSource("dsCrmrpt", dtval);
RptCrm.LocalReport.ReportPath = "Report1.rdlc";
RptCrm.LocalReport.DataSources.Add(rds);
RptCrm.DataBind();
RptCrm.LocalReport.Refresh();
}
else
{ RptCrm.Visible = false; }
来源:https://stackoverflow.com/questions/18794360/report-viewer-control-send-parameter-to-stored-procedure-in-dataset