如何以编程方式设置ASP.NET ReportViewer控件的数据源?

时间:2010-02-15 01:20:24

标签: asp.net visual-studio-2008 reportviewer

如何以编程方式设置ASP.NET ReportViewer控件的数据源?

我有一个VS 2008 ReportViewer控件,想要在几个不同的报告之间切换。

我可以通过设置报告源并刷新控件来切换报告,但我看不到在哪里设置数据源。

每个报告都有自己的数据源,如果我在构建控件时最初配置它们就可以了,但我需要在它们之间切换。

3 个答案:

答案 0 :(得分:4)

我假设问题是关于ReportViewer控件。

reportViewer.LocalReport.DataSources.Clear();
reportViewer.LocalReport.DataSources.Add(new ReportDataSource("dsname", source));

"dsname"是数据源的名称,您可以找到它.rdlc文件。 source是包含您要在报告中显示的数据的变量。

答案 1 :(得分:1)

1)基本标记:

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<rsweb:ReportViewer ID="rptView" Width="1000px" ProcessingMode="Local"
        Font-Names="Verdana" Font-Size="8pt" InteractiveDeviceInfos="(Collection)" 
        WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" runat="server"  >
</rsweb:ReportViewer>

2)编辑报告XML。设置数据集&amp;字段名称:

<DataSets>
  <DataSet Name="dsSource">
    <Fields>
      <Field Name="MyField1">
        <DataField>MyField1</DataField>
        <rd:TypeName>System.String</rd:TypeName>
      </Field>
    <Query>
      <DataSourceName>dsSource</DataSourceName>
      <CommandText>/* Local Query */</CommandText>
    </Query>
  </DataSet>
</DataSets>

3)在报告和放大器上设置数据源。报告查看器(不知道为什么......两者都是必要的)

SqlConnection cn = new SqlConnection(_connectionString);
SqlCommand cmd = new SqlCommand("dbo.MyProc", cn);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable tbl = new DataTable();

cn.Open();
da.Fill(tbl);
cn.Close();

rptView.Visible = true;
rptView.LocalReport.DataSources.Clear();
ReportDataSource rptData = new ReportDataSource("dsSource", tbl);

LocalReport r = new LocalReport();
r.ReportPath = Server.MapPath("~/Reports/MyReport.rdlc");
r.DataSources.Add(rptData);

rptView.LocalReport.DataSources.Add(rptData);
rptView.LocalReport.ReportPath = Server.MapPath("~/Reports/MyReport.rdlc");
rptView.LocalReport.Refresh();

答案 2 :(得分:0)

GlobalReportViewer.AsyncRendering = True
    If Session.Count > 0 Then
        For i As Integer = 0 To Session.Count - 1
            If Session(i).GetType().ToString() = "Microsoft.Reporting.WebForms.ReportHierarchy" Then
                Session.RemoveAt(i)
            End If
        Next
    End If
    GlobalReportViewer.LocalReport.ReportPath = ""
GlobalReportViewer.LocalReport.ReleaseSandboxAppDomain()
GlobalReportViewer.LocalReport.DataSources.Add(New ReportDataSource("XXXDataSet_YYYTable", "ObjectDSZZZ"))
GlobalReportViewer.LocalReport.ReportPath = "Reports\AAAReport.rdlc"
GlobalReportViewer.LocalReport.Refresh()