如何将数据表加载为ReportDataSource?

时间:2010-10-23 13:55:39

标签: c# reporting reportviewer

我正在尝试做类似的事情:

this.reportViewer.LocalReport.DataSources.Clear();
DataTable dt = new DataTable();
dt = this.inputValuesTableAdapter.GetData();    
Microsoft.Reporting.WinForms.ReportDataSource rprtDTSource = new Microsoft.Reporting.WinForms.ReportDataSource();

rprtDTSource = dt; // this line generates exception   

//this.reportViewer.LocalReport.DataSources.Add(rprtDTSource);
this.reportViewer.RefreshReport();

如何将数据表加载为ReportDataSource?

当前代码产生: “无法将类型'System.Data.DataTable'隐式转换为'Microsoft.Reporting.WinForms.ReportDataSource'”

4 个答案:

答案 0 :(得分:9)

您没有正确初始化ReportDataSouce。试一试:

this.reportViewer.LocalReport.DataSources.Clear(); 
DataTable dt = new DataTable(); 
dt = this.inputValuesTableAdapter.GetData();     

Microsoft.Reporting.WinForms.ReportDataSource rprtDTSource = new Microsoft.Reporting.WinForms.ReportDataSource(dt.TableName, dt); 

this.reportViewer.LocalReport.DataSources.Add(rprtDTSource); 
this.reportViewer.RefreshReport(); 

此外,您可能需要更改ReportDataSource构造函数的第一个参数,以设置报表所期望的数据源的名称。

答案 1 :(得分:4)

我相信麦迪逊上面的回答是正确的,但是对于Datasource.Name属性,可能需要强调Luke关于在.rdlc报告文件中使用DataSet名称​​的评论。对我来说,这是让我的应用无法工作的主要问题。可以通过使用“打开方式...”命令将.rdlc文件作为XML文件打开来找到它。我认为默认只是“DataSet1”:

<DataSets>
  <DataSet Name="DataSet1">
    <Fields>
      <Field Name="BusinessEntityID">
        <DataField>BusinessEntityID</DataField>
        <rd:TypeName>System.Int32</rd:TypeName>
      </Field>

我犯的另一个错误是不在调试(或发布)文件夹中包含.rdlc文件。通过右键单击解决方案资源管理器中的.rdlc文件,然后单击属性,然后将“复制到输出目录”设置为“始终复制”来修复此问题。

一旦这两个部分得到纠正,我的程序就可以在控制台应用程序中使用ReportViewer生成一个没有界面的PDF文件。

答案 2 :(得分:2)

this.reportViewer1.LocalReport.DataSources.Clear();
reportViewer1.Reset();
reportViewer1.LocalReport.ReportEmbeddedResource = "Your Report Name.rdlc";
SqlConnection con = new SqlConnection();
con.ConnectionString = "Connection";
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select * from YourTableName";
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
con.Close();     
ReportDataSource rprtDTSource= new ReportDataSource();
rprtDTSource.Name = "reportDataSetName";
rprtDTSource.Value = dt;
this.reportViewer1.LocalReport.DataSources.Add(rprtDTSource);
this.reportViewer1.RefreshReport();

答案 3 :(得分:0)

想象一下,您的RDLC文件的DataSources块如下所示:

&LT;数据集&gt;      &LT; DataSet Name =“DataSet1_Lot”&gt;

然后相关代码应为:

string name =“DataSet1_Lot”; // 这必须存在于RDLC文件中 DataTable dt = new DataTable();

Microsoft.Reporting.WinForms.ReportDataSource rprtDTSource = new Microsoft.Reporting.WinForms.ReportDataSource(name,dt);