在c#winforms中动态生成数据集、rdlc报告的列

在c#winforms中动态生成数据集、rdlc报告的列,c#,winforms,datatable,dataset,rdlc,C#,Winforms,Datatable,Dataset,Rdlc,我的任务是创建一个rdlc报告,该报告具有动态列(其数字不断变化)。我有一个datatable,它包含许多列和行(数据)。现在我需要动态创建数据集和rdlc报告(rdlc wisard) 我已经尝试过这个代码,但到现在为止运气都不好。ds3是一个包含datatable的数据集 this.reportViewer1.Reset(); this.reportViewer1.LocalReport.ReportPath = Server.MapPath("Report.rdlc"); ReportDa

我的任务是创建一个rdlc报告,该报告具有动态列(其数字不断变化)。我有一个datatable,它包含许多列和行(数据)。现在我需要动态创建数据集和rdlc报告(rdlc wisard)

我已经尝试过这个代码,但到现在为止运气都不好。ds3是一个包含datatable的数据集

this.reportViewer1.Reset();
this.reportViewer1.LocalReport.ReportPath = Server.MapPath("Report.rdlc");
ReportDataSource rds = new ReportDataSource("ds1", ds3);
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(rds);
this.reportViewer1.DataBind();
this.reportViewer1.LocalReport.Refresh();

在您的情况下,是否有有限数量的列集选项,或者是否需要基于数据集创建列数不可预测的报告。在前一种情况下,您可以使用列可见性来实现所需的功能,但在后一种情况下,最好的选择是创建一个矩阵报告,该报告可以通过在RDLC报告中添加行组和列组来完成。你能用你的案例的一些虚拟数据展示一个例子吗?我有不可预测的列。我有网格,在选择(单元格内容单击)一个特定选项时,它会显示n个列,其中包含数据。我的网格有各种选择(记录),其中每个选择都有不同数量的列(例如:如果我在网格中选择美国,它有大约100列,如果我选择新西兰,它有大约50列)因此,我的工作是在选择美国时显示所有100列数据,如果选择新西兰,则应显示50列数据。这只是动态生成列并显示在rdlc报告中。我认为最好的选择是将列视为行,并将其作为矩阵。一种方法是创建一个类
ReportCell
具有
属性。在RDLC报表中,您可以根据数据集的
属性对列进行分组,并根据数据集的
属性对行进行分组。这需要更改获取数据集的逻辑,因为现在必须更改
ds3
做一个
IEnumerable
。很抱歉回复太晚。谢谢你的建议。我必须创建rdlc报告,而不创建数据集(.xsd)或报表查看器,这意味着我不能在数据集中拖放表的列。我有datatable,通过使用此datatable,它应该自动创建数据集。在您的情况下,是否有有限数量的列集选项,或者是否需要基于数据集创建列数不可预测的报表。在前面的情况下,您可以也许可以利用列可见性来实现您所需的功能,但在后一种情况下,最好的选择是创建一个矩阵报告,该报告可以通过在RDLC报告中添加行组和列组来完成。您是否可以用一些虚拟数据来演示您的案例?我有不可预测的列。选择后,我有网格(单元格内容单击)在特定选项上,它显示n个列,其中包含数据。我的网格有各种选择(记录),其中每个选择的列数不同(例如:如果我在网格中选择美洲,它大约有100列,如果我选择新西兰,它大约有50列)因此,我的工作是在选择美国时显示所有100列数据,如果选择新西兰,则应显示50列数据。这只是动态生成列并显示在rdlc报告中。我认为最好的选择是将列视为行,并将其作为矩阵。一种方法是创建一个类
ReportCell
具有
属性。在RDLC报表中,您可以根据数据集的
属性对列进行分组,并根据数据集的
属性对行进行分组。这需要更改获取数据集的逻辑,因为现在必须更改
ds3
做一个
IEnumerable
。很抱歉回复太晚。谢谢你的建议。我必须创建rdlc报表,而不创建数据集(.xsd)或报表查看器,这意味着我不能在数据集中拖放表列。我有datatable,通过使用此datatable,它应该会自动创建数据集。