报告查看器多个数据集
Report Viewer multiple Datasets
我有一个应该显示报表查看器的 Web 应用程序。这是我的步骤:
1) 将脚本管理器和报表查看器添加到新的 Web 表单
2) 添加报表并将其绑定到名为 dataset1 的数据集
3) 为查询创建一个参数
4) 为网络表单编写代码...
private DataTable GetData(Int64 id_doc)
{
DataTable dt = new DataTable();
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringloginDb"].ConnectionString;
try
{
using (var conn = new MySqlConnection(connStr))
{
string sSQL = "select * from details_doc where id_doc=@id_doc";
MySqlCommand cmd = new MySqlCommand(sSQL, conn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new MySqlParameter("@id_doc", Session["id_doc"].ToString()));
MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
adp.Fill(dt);
}
}
catch (Exception)
{
throw;
}
return dt;
}
protected void showReport()
{
DataTable dt = GetData(Convert.ToInt64(Session["id_doc"].ToString()));
rptViewer.LocalReport.Refresh();
rptViewer.Reset();
rptViewer.LocalReport.EnableExternalImages = true;
this.rptViewer.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local;
ReportDataSource rds = new ReportDataSource("DataSet1", dt);
rptViewer.LocalReport.DataSources.Add(rds);
rptViewer.LocalReport.ReportPath = "ReportInvoice.rdlc";
ReportParameter rptParam = new ReportParameter("ReportParameter1", Session["id_doc"].ToString());
rptViewer.LocalReport.SetParameters(rptParam);
rptViewer.LocalReport.Refresh();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack){
if (Session["id_doc"] != null)
{
GetData(Convert.ToInt64(Session["id_doc"]));
mostraReport();
}
}
}
现在代码工作正常,但我需要报告显示另一个,第二个 table。我将添加另一个数据集和另一个报告参数,但后来我对代码感到困惑。任何帮助将不胜感激。
我最终设法为我的报表查看器传递了两个参数。方法如下:
- 在设计模式中添加一个 table 适配器。
- 拖放您需要的 table。
- 按使用 SQL 指令,按查询生成器并粘贴您的查询
那里。在 "Where" 条件下指定:WHERE (h.id_doc = @par1)
AND (h.id_client= @par2)
- 在报表查看器中添加您的两个参数
- 设计你的report.rdlc
- 编写代码隐藏
</p>
<pre><code>private DataTable GetData(Int64 id_doc)
{
DataTable dt = new DataTable();
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringloginDb"].ConnectionString;
try
{
using (var conn = new MySqlConnection(connStr))
{
string sSQL = "SELECT c.*, users.*, t.*, d.* FROM head_doc h INNER JOIN doc_details d ON h.id_doc = d.id_doc INNER JOIN clients c ON c.id_client = h.id_client INNER JOIN users ON h.id_user = users.id_user WHERE (h.id_doc = @par1) AND (h.id_client = @par2)";
MySqlCommand cmd = new MySqlCommand(sSQL, conn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new MySqlParameter("@par1", Session["id_doc"].ToString()));
cmd.Parameters.Add(new MySqlParameter("@par2", Session["id_client"].ToString()));
MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
adp.Fill(dt);
}
}
catch (Exception ex)
{
lblError.Text = ex.Message;
}
return dt;
}
protected void showReport()
{
DataTable DataTable1 = GetData(Convert.ToInt64(Session["id_doc"].ToString()));
report.LocalReport.Refresh();
report.Reset();
report.LocalReport.EnableExternalImages = true;
this.report.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local;
//Aggiunta dataset
ReportDataSource rds2 = new ReportDataSource("DataSet2", DataTable1);
report.LocalReport.DataSources.Add(rds2);
//Path
report.LocalReport.ReportPath = "ReportFatture.rdlc";
//Parameters
ReportParameter rptParam = new ReportParameter("par1", Session["id_doc"].ToString());
ReportParameter rptParam2 = new ReportParameter("par2", Session["id_client"].ToString());
report.LocalReport.SetParameters(rptParam);
report.LocalReport.SetParameters(rptParam2);
report.LocalReport.Refresh();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if ((Session["id_doc"] != null) && (Session["id_client"] != null))
{
showReport();
}
else
{
Response.Redirect("/Pages/Account/Whops.aspx");
}
}
}
希望对您有所帮助。谢谢
我有一个应该显示报表查看器的 Web 应用程序。这是我的步骤:
1) 将脚本管理器和报表查看器添加到新的 Web 表单
2) 添加报表并将其绑定到名为 dataset1 的数据集
3) 为查询创建一个参数
4) 为网络表单编写代码...
private DataTable GetData(Int64 id_doc)
{
DataTable dt = new DataTable();
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringloginDb"].ConnectionString;
try
{
using (var conn = new MySqlConnection(connStr))
{
string sSQL = "select * from details_doc where id_doc=@id_doc";
MySqlCommand cmd = new MySqlCommand(sSQL, conn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new MySqlParameter("@id_doc", Session["id_doc"].ToString()));
MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
adp.Fill(dt);
}
}
catch (Exception)
{
throw;
}
return dt;
}
protected void showReport()
{
DataTable dt = GetData(Convert.ToInt64(Session["id_doc"].ToString()));
rptViewer.LocalReport.Refresh();
rptViewer.Reset();
rptViewer.LocalReport.EnableExternalImages = true;
this.rptViewer.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local;
ReportDataSource rds = new ReportDataSource("DataSet1", dt);
rptViewer.LocalReport.DataSources.Add(rds);
rptViewer.LocalReport.ReportPath = "ReportInvoice.rdlc";
ReportParameter rptParam = new ReportParameter("ReportParameter1", Session["id_doc"].ToString());
rptViewer.LocalReport.SetParameters(rptParam);
rptViewer.LocalReport.Refresh();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack){
if (Session["id_doc"] != null)
{
GetData(Convert.ToInt64(Session["id_doc"]));
mostraReport();
}
}
}
现在代码工作正常,但我需要报告显示另一个,第二个 table。我将添加另一个数据集和另一个报告参数,但后来我对代码感到困惑。任何帮助将不胜感激。
我最终设法为我的报表查看器传递了两个参数。方法如下:
- 在设计模式中添加一个 table 适配器。
- 拖放您需要的 table。
- 按使用 SQL 指令,按查询生成器并粘贴您的查询 那里。在 "Where" 条件下指定:WHERE (h.id_doc = @par1) AND (h.id_client= @par2)
- 在报表查看器中添加您的两个参数
- 设计你的report.rdlc
- 编写代码隐藏
</p>
<pre><code>private DataTable GetData(Int64 id_doc)
{
DataTable dt = new DataTable();
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringloginDb"].ConnectionString;
try
{
using (var conn = new MySqlConnection(connStr))
{
string sSQL = "SELECT c.*, users.*, t.*, d.* FROM head_doc h INNER JOIN doc_details d ON h.id_doc = d.id_doc INNER JOIN clients c ON c.id_client = h.id_client INNER JOIN users ON h.id_user = users.id_user WHERE (h.id_doc = @par1) AND (h.id_client = @par2)";
MySqlCommand cmd = new MySqlCommand(sSQL, conn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new MySqlParameter("@par1", Session["id_doc"].ToString()));
cmd.Parameters.Add(new MySqlParameter("@par2", Session["id_client"].ToString()));
MySqlDataAdapter adp = new MySqlDataAdapter(cmd);
adp.Fill(dt);
}
}
catch (Exception ex)
{
lblError.Text = ex.Message;
}
return dt;
}
protected void showReport()
{
DataTable DataTable1 = GetData(Convert.ToInt64(Session["id_doc"].ToString()));
report.LocalReport.Refresh();
report.Reset();
report.LocalReport.EnableExternalImages = true;
this.report.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local;
//Aggiunta dataset
ReportDataSource rds2 = new ReportDataSource("DataSet2", DataTable1);
report.LocalReport.DataSources.Add(rds2);
//Path
report.LocalReport.ReportPath = "ReportFatture.rdlc";
//Parameters
ReportParameter rptParam = new ReportParameter("par1", Session["id_doc"].ToString());
ReportParameter rptParam2 = new ReportParameter("par2", Session["id_client"].ToString());
report.LocalReport.SetParameters(rptParam);
report.LocalReport.SetParameters(rptParam2);
report.LocalReport.Refresh();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if ((Session["id_doc"] != null) && (Session["id_client"] != null))
{
showReport();
}
else
{
Response.Redirect("/Pages/Account/Whops.aspx");
}
}
}
希望对您有所帮助。谢谢