0

ReportBuilder 3.0 で非常に単純なレポート (.rdl) を作成しました。私のデータベースへの接続があり、住所フィールドから都市を取得します。

SELECT TOP 10 City, COUNT(City) FROM [MYDB].[dbo].[ResidentialAddress] WHERE StateName = 'WA' OR StateName = 'Washington' GROUP BY City ORDER BY COUNT(City) DESC

これは ReportBuilder で機能します。保存して閉じます。次に、VS 2010 で MicroSoft.Reporting.WebForms.ReportViewer を介してレポートを開いて表示しようとしました。ローカルの c#/ASP.NET Web サイトに完全に空の RDL ファイル (テキストのみ) を読み込むことができます。

            this.MyReportViewer.Reset();
            this.MyReportViewer.ProcessingMode = ProcessingMode.Local;
            this.MyReportViewer.AsyncRendering = false;
            this.MyReportViewer.LocalReport.LoadReportDefinition(new StreamReader("H:\\DataReportsViewer\\DataReportsViewer\\" + RDLFileList.SelectedValue));
            this.MyReportViewer.LocalReport.ReportPath = RDLFileList.SelectedValue;          
            this.MyReportViewer.ShowReportBody = true;
            this.MyReportViewer.LocalReport.Refresh();

ただし、チャートを追加するとすぐに、次のエラーが発生します。

データ ソース 'DataSet1' のデータ ソース インスタンスが提供されていません。

RDL ファイルを開くと、接続文字列とクエリがそこにあるように見えるので、私には意味がありません。

<DataSources>
    <DataSource Name="DataSource1">
      <ConnectionProperties>
        <DataProvider>SQL</DataProvider>
        <ConnectString>Data Source=MYSERVER;Initial Catalog=Ad_Dev</ConnectString>
        <IntegratedSecurity>true</IntegratedSecurity>
      </ConnectionProperties>
      <rd:SecurityType>Integrated</rd:SecurityType>
      <rd:DataSourceID>350f6976-9402-43fd-b8f8-8f809f116f84</rd:DataSourceID>
    </DataSource>
  </DataSources>
  <DataSets>
    <DataSet Name="DataSet1">
      <Query>
        <DataSourceName>DataSource1</DataSourceName>
        <CommandText>SELECT TOP 10 ResidentialAddress.City,COUNT(ResidentialAddress.City)
FROM ResidentialAddress
WHERE StateName = 'WA'
GROUP BY ResidentialAddress.City
ORDER BY COUNT(ResidentialAddress.City)</CommandText>
        <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
      </Query>
      <Fields>
        <Field Name="City">
          <DataField>City</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="ID">
          <DataField />
          <rd:TypeName>System.Int32</rd:TypeName>
        </Field>
      </Fields>
    </DataSet>
  </DataSets>

そのため、C# コードで回避策を試みました。

            //Added line: TestDataSource runs same query and returns correctly loaded DataTable
            ReportDataSource reportDataSource = new ReportDataSource("DataSet1", TestDataSource()); 
            this.MyReportViewer.LocalReport.DataSources.Add(reportDataSource);

それは実行されますが、データは表示されません。勝てない!:(

何か案は?SSRS と ASP.NET は、互いに遊ぶことを意図したものではありませんか? このレポート ビューアーのローカル テスト バージョンを作成したいと考えていましたが、空白のレポートをローカルで実行するために、すでに多くのハックを行う必要がありました。

4

1 に答える 1

2

ローカル処理モードでは、コードを呼び出してデータセットを提供する必要があります。つまり、ホスト プログラムはすべてのクエリを実行し、そのデータをレポート ビューアーに渡す必要があります。ここに例があります http://www.gotreportviewer.com/defineddata/index.htmlプラス面では、任意のデータをレポート ビューアー ( http://www.gotreportviewer.com/objectdatasources/index.html )に渡すことができます。

于 2012-10-09T00:29:57.907 に答える