VS2010 rdlc报表 一个报表如何显示多个数据源 我们是做打印单据的,之前VS2008倒还可以啦,直接从数据源拖到rdlc报表上,单头拖 datatable1 单身表格拖datatable2, 也就是一个rdlc报表可以拥有多个数据集,但是VS2010就奇怪了,只能是一个数据集, 整了两个星期,我还是搞不明白,请大神指教.40分送给你 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、如何以代码方式配置多个数据源public partial class zhenduansuo_a_rdlc : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string queryStr=""; if (Request.QueryString["reportID"] == null) { Response.Redirect("Default.aspx"); } else { queryStr = Request.QueryString["reportID"].ToString(); } //mainReportName string mainReportName = Request.QueryString["mainReportName"].ToString();ReportProcess rp = new ReportProcess(); DataTable dt = rp.getZhenduansuoAandBData(queryStr);//这是报表的ID if (dt.Rows.Count > 0) {getColl gcoll = new getColl(dt);List<DataSetColl> Colls = gcoll.GetCollsAandB();//数据源是我自己定义的 ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetColl1", Colls));//这儿绑定了两个数据源实例,一个叫DataSetColl1,另一个叫DataSetColl,虽然他们用的是一个数据源。 ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetColl", Colls)); } else { mainReportName = ""; Page.ClientScript.RegisterStartupScript(this.GetType(), "aaccd", "alert('此表中尚没有数据');", true); } if (mainReportName == "zhenduansuo_a") { ReportViewer1.LocalReport.ReportPath = Server.MapPath(@"~\RDLC\zhenduansuo_A.rdlc");//必须指定明确的路径地址,不能是URL }}2、再看RDLC文件里的单元格里的数据配置如果一个RDLC文件中只有一个数据源实例,其表达式是这样的:=First(Fields!Danwei.Value),这里没有明确指出数据源实例名,但如果你后来改动了数据源并增加了显示在报表里的项目,则必须要在属性框里看一看是否自动增了数据源实例名,如果数据源实例变成了多个,则需手动指定每个数据单元的数据源实例,否则可以报这样的错误:尚未为数据源“DataSetColl”提供数据源实例。如果在一个RDLC文件中需要多个数据源实例,则需要象如下一样在双引号里指定=First(Fields!Danwei.Value, "DataSetColl")指定的时候选中表或文本框,不能选中表达式,点右键出现属性对话框,在这里面把各自需要的数据源指定。如下图:这是数据表的属性框,在数据源属性里,出现了两个实例名。 ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetColl1", Colls));//这儿绑定了两个数据源实例,一个叫DataSetColl1,另一个叫DataSetColl,虽然他们用的是一个数据源。 ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetColl", Colls)); 怎么两个都是Colls,是不是写错了,是不是应该如下ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetColl1", Colls));//这儿绑定了两个数据源实例,一个叫DataSetColl1,另一个叫DataSetColl,虽然他们用的是一个数据源。 ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetColl", Colls2)); 你可以更改数据集的里面的数据。在报表加载的时候,根据不同的需要加载不同的数据 private void rvErrorSummarize_Load(object sender, EventArgs e) { this.rvErrorSummarize.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local; this.rvErrorSummarize.LocalReport.ReportPath = Application.StartupPath + @"\RDLC\rptPrintDayLog.rdlc"; this.rvErrorSummarize.LocalReport.DataSources.Clear(); DataSet dt = GetLogDataSet(); this.rvErrorSummarize.LocalReport.DataSources.Add(new ReportDataSource("dsPrintDayLog_dtPrintDayLog", dt.Tables[0])); this.rvErrorSummarize.RefreshReport(); }在这个事件下加载数据 是不是合并成一个数据集才是王道呢, 难道数据集不可以分开吗, VS2005,VS2008都可以支持,为什么VS2010就摒弃这个优秀的东西呢 我试出来一个办法,这肯定是对于任何用rdlc报表的一个福音,方法如下右键rdlc报表--打开方式--XML(文本)编辑器,进行手动添加,要看具体的话,请看我的博客吧,我会详细说明的 直接在这里说明好啦,不想写博客了,右键rdlc报表--打开方式--XML(文本)编辑器,进行手动添加,用XML打开后内容如下: <DataSets> <DataSet Name="Ftransfer"> <Fields> <Field Name="stcode"> <DataField>stcode</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="rowno"> <DataField>rowno</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="cinvcode"> <DataField>cinvcode</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="cinvcname"> <DataField>cinvcname</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="cinvstd"> <DataField>cinvstd</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="intb"> <DataField>intb</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="st01"> <DataField>st01</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="lotnumber1"> <DataField>lotnumber1</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="st02"> <DataField>st02</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="lotnumber2"> <DataField>lotnumber2</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> <Field Name="re1"> <DataField>re1</DataField> <rd:TypeName>System.String</rd:TypeName> </Field> </Fields> <Query> <DataSourceName>FDataSet1</DataSourceName> <CommandText>/* Local Query */</CommandText> </Query> <rd:DataSetInfo> <rd:DataSetName>FDataSet1</rd:DataSetName> <rd:SchemaPath>D:\ERP编程\海纳管理软件\KAIERP\FDataSet1.xsd</rd:SchemaPath> <rd:TableName>Ftransfer</rd:TableName> <rd:TableAdapterFillMethod /> <rd:TableAdapterGetDataMethod /> <rd:TableAdapterName /> </rd:DataSetInfo> </DataSet>反正是按照XML的编辑方式,自己写啦,保存,回到RDLC报表,打开工具箱的,拖一个列表工具到报表上,查看Datasetname 属性,会发现有自己添加的数据源,这个时候,自己添加想要的数据源即可. c#写一个注册机,最好与机器硬盘绑定,给个思路,有代码最好,谢谢 C# web页面中后台生成了treeview,如果再点击生成的treeview节点的时候,让它弹出一个模式框?代码怎么写? 读取CSV文件,记录成功和失败的数据ID和原因。 C# 组播程序,自家局域网测试通过,单位的却不能 DataGradView 问一个关于内存分配的问题~~~~~~~~~~~~~ WPF浏览器应用程序中页面与页面之间如何传递参数 C#中调用C生成的Dll 问题 如何向远程桌面传送ctrl+alt+del指令? 判断文本框内容时有问题 WindowsCE中怎样解析Jason? 关于xml加密问题
public partial class zhenduansuo_a_rdlc : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string queryStr=""; if (Request.QueryString["reportID"] == null) { Response.Redirect("Default.aspx"); } else { queryStr = Request.QueryString["reportID"].ToString(); } //mainReportName string mainReportName = Request.QueryString["mainReportName"].ToString();
ReportProcess rp = new ReportProcess(); DataTable dt = rp.getZhenduansuoAandBData(queryStr);//这是报表的ID if (dt.Rows.Count > 0) {
getColl gcoll = new getColl(dt);
List<DataSetColl> Colls = gcoll.GetCollsAandB();//数据源是我自己定义的 ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetColl1", Colls));
//这儿绑定了两个数据源实例,一个叫DataSetColl1,另一个叫DataSetColl,虽然他们用的是一个数据源。 ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetColl", Colls)); } else { mainReportName = ""; Page.ClientScript.RegisterStartupScript(this.GetType(), "aaccd", "alert('此表中尚没有数据');", true); } if (mainReportName == "zhenduansuo_a") { ReportViewer1.LocalReport.ReportPath = Server.MapPath(@"~\RDLC\zhenduansuo_A.rdlc");//必须指定明确的路径地址,不能是URL }
}
2、再看RDLC文件里的单元格里的数据配置
如果一个RDLC文件中只有一个数据源实例,其表达式是这样的:=First(Fields!Danwei.Value),这里没有明确指出数据源实例名,但如果你后来改动了数据源并增加了显示在报表里的项目,则必须要在属性框里看一看是否自动增了数据源实例名,如果数据源实例变成了多个,则需手动指定每个数据单元的数据源实例,否则可以报这样的错误:尚未为数据源“DataSetColl”提供数据源实例。
如果在一个RDLC文件中需要多个数据源实例,则需要象如下一样在双引号里指定
=First(Fields!Danwei.Value, "DataSetColl")
指定的时候选中表或文本框,不能选中表达式,点右键出现属性对话框,在这里面把各自需要的数据源指定。如下图:这是数据表的属性框,在数据源属性里,出现了两个实例名。
//这儿绑定了两个数据源实例,一个叫DataSetColl1,另一个叫DataSetColl,虽然他们用的是一个数据源。 ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetColl", Colls));
ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetColl1", Colls));
//这儿绑定了两个数据源实例,一个叫DataSetColl1,另一个叫DataSetColl,虽然他们用的是一个数据源。 ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSetColl", Colls2));
{
this.rvErrorSummarize.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
this.rvErrorSummarize.LocalReport.ReportPath = Application.StartupPath + @"\RDLC\rptPrintDayLog.rdlc";
this.rvErrorSummarize.LocalReport.DataSources.Clear();
DataSet dt = GetLogDataSet();
this.rvErrorSummarize.LocalReport.DataSources.Add(new ReportDataSource("dsPrintDayLog_dtPrintDayLog", dt.Tables[0]));
this.rvErrorSummarize.RefreshReport();
}
在这个事件下加载数据
右键rdlc报表--打开方式--XML(文本)编辑器,进行手动添加,要看具体的话,请看我的博客吧,我会详细说明的
右键rdlc报表--打开方式--XML(文本)编辑器,进行手动添加,用XML打开后内容如下:
<DataSets>
<DataSet Name="Ftransfer">
<Fields>
<Field Name="stcode">
<DataField>stcode</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="rowno">
<DataField>rowno</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="cinvcode">
<DataField>cinvcode</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="cinvcname">
<DataField>cinvcname</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="cinvstd">
<DataField>cinvstd</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="intb">
<DataField>intb</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="st01">
<DataField>st01</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="lotnumber1">
<DataField>lotnumber1</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="st02">
<DataField>st02</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="lotnumber2">
<DataField>lotnumber2</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="re1">
<DataField>re1</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>FDataSet1</DataSourceName>
<CommandText>/* Local Query */</CommandText>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>FDataSet1</rd:DataSetName>
<rd:SchemaPath>D:\ERP编程\海纳管理软件\KAIERP\FDataSet1.xsd</rd:SchemaPath>
<rd:TableName>Ftransfer</rd:TableName>
<rd:TableAdapterFillMethod />
<rd:TableAdapterGetDataMethod />
<rd:TableAdapterName />
</rd:DataSetInfo>
</DataSet>
反正是按照XML的编辑方式,自己写啦,保存,回到RDLC报表,打开工具箱的,拖一个列表工具到报表上,查看Datasetname 属性,会发现有自己添加的数据源,这个时候,自己添加想要的数据源即可.