rdlc报表问题

蜜_Lumia 2010-06-09 01:31:53

主报表的值能出来,子报表显示不了,报错:错误: 无法显示子报表。
单个的能显示。。。
后台代码:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Epower.ITSM.SqlDAL.InsertInfo;
using Microsoft.Reporting.WebForms;

namespace Epower.ITSM.Web.DeptForms.report
{
public partial class qiyeinfo : System.Web.UI.Page
{
DataTable dt2 = null;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
InitiliazeYear();
}

private void InitiliazeYear()
{
for (int i = 2010; i < 2050; i++)
{
ddlTime.Items.Add(new ListItem(i.ToString(), i.ToString()));
}
}

private void BindData()
{
DataTable dt = QiyeReportService.getQiye(this.ddlTime.SelectedValue);
reportView.Reset();
reportView.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local;
reportView.LocalReport.ReportPath = Server.MapPath("../report/ReportTemplate/ZhuReport.rdlc");
reportView.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("Epower_ITSM_SqlDAL_InsertModel_QiyeReport", dt));
reportView.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
reportView.LocalReport.Refresh();
}

protected void btnQuery_Click(object sender, EventArgs e)
{
BindData();
}


private void LocalReport_SubreportProcessing(object sender, Microsoft.Reporting.WebForms.SubreportProcessingEventArgs e)
{
if (dt2 == null)
dt2 = So_ProductsServices.getSo_Products();
e.DataSources.Add(new ReportDataSource("Epower_ITSM_SqlDAL_InsertModel_So_Products", dt2));
}
}
}
...全文
519 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
moqijunnu 2011-07-07
  • 打赏
  • 举报
回复
看下你子报表的数据源名字和你在页面里的数据源的名字是否相同
bigRainSun 2010-11-15
  • 打赏
  • 举报
回复
关于VB.net里的RDLC子报表,用语句方式来控制子报表的例子,请发给我。sznetking@126.com
bigRainSun 2010-11-15
  • 打赏
  • 举报
回复
都是C#的,有没有VB.net,关于RDLC的子报表的,请发电邮给我。sznetking@126.com
非常感谢。
mars199 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lumi0605 的回复:]
引用 5 楼 happy_gril 的回复:
小蜜快找阿泰去


阿泰是谁,怎么可以找到他。。
[/Quote]向专家提问,最低消费一百
lakeq 2010-06-09
  • 打赏
  • 举报
回复
没弄过这个 ,帮顶 ING ...
蜜_Lumia 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 happy_gril 的回复:]
小蜜快找阿泰去
[/Quote]

阿泰是谁,怎么可以找到他。。
蜜_Lumia 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mars199 的回复:]
90后记得欠爷1K可用分

步骤1:建立一个报表,在报表中加入“列表”控件,在列表中加入文本框,将主记录数据源绑定到文本框中,示例中有一个“姓名”字段,主表与子表靠这个字段来关联。

步骤2:在列表中插入一个“子报表”控件,新建一个报表,将此子报表控件的子报表属性选择为新建的这个报表。

步骤3:在子报表属性的参数中加入一个参数“姓名”,参数值=“=Fields!姓名.Value”。
……
[/Quote]

姐早就已经看过了,解决不了问题。。。
aier3333 2010-06-09
  • 打赏
  • 举报
回复
我也没弄过,帮顶 ,学习
mars199 2010-06-09
  • 打赏
  • 举报
回复
90后记得欠爷1K可用分

步骤1:建立一个报表,在报表中加入“列表”控件,在列表中加入文本框,将主记录数据源绑定到文本框中,示例中有一个“姓名”字段,主表与子表靠这个字段来关联。

步骤2:在列表中插入一个“子报表”控件,新建一个报表,将此子报表控件的子报表属性选择为新建的这个报表。

步骤3:在子报表属性的参数中加入一个参数“姓名”,参数值=“=Fields!姓名.Value”。

步骤4:打开子报表,在报表属性中加入一个报表参数“姓名”,这个参数与上一步设置的参数同名。

步骤5:在子报表中加入表格控件,表的属性中的筛选器加入“=Fields!姓名.Value”=“=Parameters!姓名.Value”。

步骤6:在报表浏览器所在的界面中还需有代码配合,我的示例代码如下:

public partial class Form2 : Form
{
DataTable dt2;

public Form2()
{
InitializeComponent();

}

private void Form2_Load(object sender, EventArgs e)
{
ReportViewer reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = "Report1.rdlc";

reportViewer.LocalReport.SubreportProcessing += new Microsoft.Reporting.WinForms.SubreportProcessingEventHandler(LocalReport_SubreportProcessing);

reportViewer.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1_DataTable1", loadData1()));

reportViewer.Dock = DockStyle.Fill;
this.Controls.Add(reportViewer);

reportViewer.RefreshReport();

}



private void LocalReport_SubreportProcessing(object sender, Microsoft.Reporting.WinForms.SubreportProcessingEventArgs e)
{
if (dt2 == null)
dt2 = loadData2();

e.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1_DataTable2", dt2));
}


private DataTable loadData1()
{
DataSet1.DataTable1DataTable dt = new DataSet1.DataTable1DataTable();

DataRow dr1 = dt.NewRow();
dr1["姓名"] = "王三";
dr1["日期"] = DateTime.Now.ToShortDateString();
dr1["金额"] = 130.45;
dr1["余额"] = 1234.33;
dt.Rows.Add(dr1);

DataRow dr2 = dt.NewRow();
dr2["姓名"] = "李四";
dr2["日期"] = DateTime.Now.ToShortDateString();
dr2["金额"] = 111.33;
dr2["余额"] = 22.3;
dt.Rows.Add(dr2);

return dt;
}
private DataTable loadData2()
{
DataSet1.DataTable2DataTable dt2 = new DataSet1.DataTable2DataTable();
DataRow d1 = dt2.NewRow();
d1["姓名"] = "王三";
d1["编号"] = "0001";
d1["名称"] = "床位费";
d1["价格"] = 10;
d1["数量"] = 1;
d1["金额"] = 10;
dt2.Rows.Add(d1);

DataRow d2 = dt2.NewRow();
d2["姓名"] = "王三";
d2["编号"] = "0002";
d2["名称"] = "护理费";
d2["价格"] = 8;
d2["数量"] = 3;
d2["金额"] = 24;
dt2.Rows.Add(d2);

DataRow d3 = dt2.NewRow();
d3["姓名"] = "李四";
d3["编号"] = "0002";
d3["名称"] = "注射费";
d3["价格"] = 8;
d3["数量"] = 3;
d3["金额"] = 24;
dt2.Rows.Add(d3);

return dt2;

}


其中LocalReport_SubreportProcessing这个方法需手工加,再给报表控件加上这个事件的引用,在这个事件中给子报表加数据库源,才可显示子报表。


另外,可以通过

string txt = first.ToShortDateString() + " 至 " + last.ToShortDateString();
ReportParameter rp = new ReportParameter("Report_Parameter_0", txt);
reportViewer1.LocalReport.SetParameters(new Microsoft.Reporting.WinForms.ReportParameter[] { rp });

这种方法从外部给报表传递参数值,当然,需事先在报表中设计好相应的控件接收这个参数值。这主要用于显示如表头,表尾的一些信息。
呦呦 2010-06-09
  • 打赏
  • 举报
回复
小蜜快找阿泰去
蜜_Lumia 2010-06-09
  • 打赏
  • 举报
回复

就没人来帮帮忙么。。。。
Dobzhansky 2010-06-09
  • 打赏
  • 举报
回复
不懂帮顶
mars199 2010-06-09
  • 打赏
  • 举报
回复
不懂帮顶
  • 打赏
  • 举报
回复
关注 提高人气

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧