RDLC绑定数据源的时候提示:报表项表达式只能引用当前数据集作用域内的字段或指定数据集作用域内的字段

来源:互联网 发布:js使用java变量 编辑:程序博客网 时间:2024/05/18 01:24

比如指定的RDLC报表的数据集中只有A B C 三个字段(RDLC的<CommandText>SELECT A,B,C FROM dbo.TableName</CommandText>),需要手动增加列的时候(比如在报表里显示A B C D列,D列可能是个运算得到字段等等)如果直接在绑定数据源的代码里写会提示:报表项表达式只能引用当前数据集作用域内的字段或指定数据集作用域内的字段。

实例:

DataTable dt = new DataTable();dt = DbHelperSQL.Query("SELECT A,B,C,SUM(A+B) AS D FROM table GROUP BY  A,B,C").Tables[0];ReportViewer1.LocalReport.ReportPath = @"test.rdlc";ReportViewer1.LocalReport.DataSources.Clear();ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("myds", dt));

如果遇到上面的问题,通过新建数据库的视图,然后重新制定RDLC的数据集应该也能解决问题。现在我用的方法是 用记事本(VS2008好像没办法直接看到RDLC的设计代码)打开test.rdlc,然后找到<DataSets>   <DataSet Name="myds">   <Fields>在里面增加一个D的描述就行了。

比如原来的是

<Field Name="A">
          <DataField>A</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="B">
          <DataField>B</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="C">
          <DataField>C</DataField>
          <rd:TypeName>System.DateTime</rd:TypeName>
</Field>

增加一个D的描述

<Field Name="D">
<DataField>D</DataField>
 <rd:TypeName>System.Int</rd:TypeName>

注意最后一行的数据类型描述。