代码之家  ›  专栏  ›  技术社区  ›  ehmad

如何将datatable加载为ReportDataSource?

  •  4
  • ehmad  · 技术社区  · 14 年前

    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();
    

    如何将datatable加载为ReportDataSource?

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

    4 回复  |  直到 11 年前
        1
  •  10
  •   madisonw    14 年前

    您没有正确初始化reportdatasource。试试看:

    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(); 
    

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

        2
  •  4
  •   MQuiggGeorgia    11 年前

    我相信madisonw上面的回答是正确的,但是Luke关于使用数据集名称的评论 ,对于Datasource.Name属性,可能需要强调。对我来说,这是阻止我的应用程序工作的主要原因。通过使用“Open with…”命令将.rdlc文件作为XML文件打开,可以找到它。我认为默认值只是“DataSet1”:

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

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

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

        3
  •  2
  •   jack ghaleb    11 年前
    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();
    
        4
  •  0
  •   Luke    11 年前

    假设RDLC文件的DataSources块如下所示:

    <数据集> <DataSet Name=“DataSet1_Lot”>

    那么相关代码应该是:

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

    Microsoft.Reporting.WinForms.ReportDataSource rprtDTSource=新的Microsoft.Reporting.WinForms.ReportDataSource(名称,dt);