none
VS2010 报表的使用 RRS feed

  • 问题

  • 大家好,我现在使用的是VS2010专业版。由于项目需要试用了VS2010自带的报表功能。由于是第一次使用,所以遇到一点问题想请教下。感谢各位的帮助!

    我创建报表的步骤是:

    1、新建数据集,数据集使用的是带有参数的存储过程,由于存储过程中有创建临时表的语句,所以在使用TableAdapter配置向导的最后一步提示错误:Invalid object name '临时表名'。

    2、新建RDLC报表,并绑定第一步建立的数据集。由于数据集是存储过程,在报表数据工具栏里看不到输出字段,解决的办法是手工在RDLC报表的XML中添加的字段。

    3、新建一个页面并拖放一个ReportViewer控件,报表选择我已经创建好的报表,新建一个ObjectDataSource,配置ObjectDataSource的数据源为第一步建立的数据集。

    以上三步完成后,在后台代码给ReportViewer.LocalReport.SetParameters赋值参数发现报表没有数据反映。给ObjectDataSource里面的数据源的参数设上默认值后报表就有数据反映了。

    我的问题:

    1、如何在后台给ObjectDataSource数据源的参数传值?其中有一个参数是需要传多个值的,但是这个设置仅在RDLC报表的参数属性里能设置,而ObjectDataSource的数据源参数属性只能设置参数源。

    2、在给RDLC报表绑定数据集得时候,能不能写一个空的datatable仅仅附上报表的字段就行?我这样尝试过,报错:A data source instance has not been supplied for the data source 'DataSet1'. 现在搞不清楚的就是既然已经在RDLC报表上绑定了一个调用存储过程的数据集而且也设置了传入参数,为什么还要在ReportViewer这边再绑定一个相同的数据源?目前我知道的是VS2005只需要在RDL报表上绑定一个数据集就行了。

    2011年6月15日 5:52

全部回复

  • 我用的是VS2010,我在使用ReportViewer预览打印时是这样做的。

    1.手动修改rdlc报表“Test.rdlc”,首先要添加数据源,然后可以手动在rdlc报表文件代码中添加报表数据集“DSTest”,以及数据库中数据结构(结构中的字段名称与你Query出来的Table应该对应)。数据集最后必须要指定对应的数据源。

    如: <DataSources>
        <DataSource Name="MyDataSet">
          <ConnectionProperties>
            <DataProvider>System.Data.DataSet</DataProvider>
            <ConnectString>/* Local Connection */</ConnectString>
          </ConnectionProperties>
          <rd:DataSourceID>12a28d4e-6eff-453e-89c8-8486679c2763</rd:DataSourceID>
        </DataSource>
      </DataSources>
      <DataSets>
        <DataSet Name="DSTest">
          <Fields>
            <Field Name="MenuItemTitle">
              <DataField>MenuItemTitle</DataField>
              <rd:TypeName>System.String</rd:TypeName>
            </Field>
            <Field Name="ActiveM">
              <DataField>ActiveM</DataField>
              <rd:TypeName>System.String</rd:TypeName>
            </Field>
            <Field Name="MOUDesc">
              <DataField>MOUDesc</DataField>
              <rd:TypeName>System.String</rd:TypeName>
            </Field>
            <Field Name="Price">
              <DataField>Price</DataField>
              <rd:TypeName>System.String</rd:TypeName>
            </Field>
                </Fields>
          <Query>
            <DataSourceName>MyDataSet</DataSourceName>
            <CommandText>/* Local Query */</CommandText>
          </Query>
        </DataSet>
         </DataSets>

    2.创建ReportDataSource对象rptDataSource,创建Datatable名为table1,table1的列名需要与DSTest定义的字段名称对应。通过rptDataSource.Add(new ReportDataSource("DSTest", table1)),数据就准备好了。

    3.在界面添加ReportViewer控件repViewer(我在XAML中使用需要在外面套个WindowsFormsHost)。然后在后台cs代码中为repViewer.LocalReport.DataSources添加ReportDataSource,同时为repViewer.LocalReport.ReportPath赋值为Test.rdlc所在路径,不要忘记刷新repViewer在每次更新数据时。

     

     

    2011年12月8日 1:46