web-dev-qa-db-ja.com

RDLCデータソースをオブジェクトに設定する際の問題

背景:

AccessデータベースアプリケーションをASP.NetC#MVCに変換する作業を担当しました。これは私の最初のMVCアプリケーションです。

変換が必要なレポートは10個あります。 RDLCファイルとreportviewerを使用しています。最新のパッチをすべて適用したVisualStudio2010を使用しています。既存のAccessデータベースが入力されているSQLServerデータベースに接続しているため、テーブル構造はほぼ確定しています。そうでない場合は、10年間のデータを変換する必要があります。

2つを除くすべてのレポートを完了しました。最終レポートにはさらに処理が必要であり、データベースのデータを表示するだけではありません。これを行う最も簡単な方法は、C#オブジェクトを作成し、すべての処理をサーバー側で実行してから、RDLCを使用して結果を表示することです。

問題

私が抱えている問題は、VisualStudioが作成したオブジェクトを潜在的なデータソースとして認識しないことです。 「データセットの追加」を試みるたびに、「データソース構成ウィザード」が表示され、可能なデータ接続としてSQLServerデータベースのみが提供されます。データセットとしてオブジェクトを選択できる画面が存在することは知っていますが、その画面は表示されません。

オブジェクトは次のとおりです(わかりやすくするために処理関数は削除されています)。

public class TurnAroundVal
{
    // Registration Package information
    public string dataType { get; set; }

    // Calculated totals; values only set through constructor or calculation function
    public int packageCount { get; private set; }
    public int dayCount { get; set; }
    public double avgTurnAround { get; private set; }
    public int upperRange { get; private set; }
    public int lowerRange { get; private set; }
}

public class TurnAroundVals
{
    // Public Variables
    public IEnumerable<TurnAroundVal> TurnArounds { get; private set; }
    public DatePass dates { get; set; }
    public int pkgTotal { get; private set; }
    public double dayTotal { get; private set; }
    public double avgAllTurnArounds { get; private set; }
}

また、「TurnAroundVal」のIEnumerableをデータソースとして使用し、日付、int、およびdoubleをパラメーターとして渡すこともできます。どちらも機能します。

質問

Visual Studio 2010に、作成したオブジェクトをRDLCデザイナーが表示できるようにするための設定がありませんか?これが私が定義したクラスで機能すると考えるのは間違っていますか?

回答

与えられた提案はすべて役に立ちましたが、最終的に私にとってそれが機能するようになったのは、同じソリューションで一時的な非Webプロジェクトを作成し、そこでRDLCを作成することでした。データセットを追加しようとすると、オプションとして「オブジェクト」が表示されます。オブジェクトが表示されるようにWebプロジェクトへの参照を追加する必要がありますが、必要なものを選択してRDLCで使用できます。その後、RDLCファイルをWebプロジェクトにドラッグアンドドロップし、一時プロジェクトを削除するだけで、準備は完了です。データソースはコードで手動で追加する必要があり、RDLCで指定したものと同じ名前を付ける必要があることを覚えておいてください。

19
War2d2
  1. クラスがアプリケーションと同じ名前空間にあることを確認してください。
  2. レポートを作成する前に、アプリケーションを作成してみてください
  3. レポートウィザードを開始します。 DataSouceで、Webアプリケーションの名前を選択します。
  4. [使用可能なデータセット]の下に、VisualStudioが「メソッドの選択」として解釈するものが表示されます。すべてが順調であれば、これはターンアラウンドであるはずです。

クラスファイルをApp_DataまたはApp_Codeフォルダーに配置する必要があるかもしれませんが、私にはわかりません。

これも役立つかもしれません。

http://msdn.Microsoft.com/en-us/library/ms251692%28v=vs.100%29.aspx

3
Marnee KG7SIO

パブリックメンバーのみを使用する場合、VisualStudioはクラスを認識しません。代わりにgetterとsetterを使用すると、データソースを選択したときにクラスを確認できます。

Visual Studioには、パブリックメンバーでは機能しないウィザードが他にもいくつかあります。

乾杯、マーカス

オブジェクトを同じ名前空間の下に設定しますが、UIプロジェクトで参照する別のプロジェクトに設定します。

また、INotifyPropertyChangedを実装してみてください。

2
raphael

レポートウィザードを使用せずに、VS2017でオブジェクトをデータソースとして追加できました。 [c#を使用したWinformsアプリ] [PS私はNOOBなので、間違いなどが発生する可能性がありますが、これが方向性を示すのに役立つことを願っています。]使用した手順:

パートA1。データを表すオブジェクトを作成します。例:オブジェクト/モデルクラス私の場合は予約オブジェクトです

 class FutureVisitsModel
    {
        public DateTime StartDate {get; set;}
        public string Client_Id { get; set; }
        public string Treatment_Desc { get; set; }
        public string Service_Code { get; set; }

        public FutureVisitsModel()
        {
            DateTime startdate = StartDate;
            String clinetid = Client_Id;
            String treatmentdesc = Treatment_Desc;
            String serviceCode = Service_Code;
        }
    }

パートB:レポートの作成2.ソリューションへのレポートの追加:ソリューションを右クリックし、[新しいアイテムの追加]を選択してレポートを選択 ここに画像の説明を入力 3.空白のレポートを開きました4.ツールボックスから、テーブルをドラッグアンドドロップしますレポートへ5.ダイアログが開いてデータソースを選択します6.ソリューションからオブジェクトを選択します[ypuはパートAで作成したクラスを探します

パートC:レポートビューアフォームを作成する7.ソリューションエクスプローラーで新しいフォーム「formRptViewer」を作成する8.フォームを開いてレポートビューアコントロールを追加する9.ツールボックスにコントロールがない場合は、レポートをインストールする必要がありますナゲットからのビューアパッケージ、またはパッケージマネージャコンソールを介してインストールします。 webformsバージョン:Install-Package Microsoft.ReportingServices.ReportViewerControl.WebForms winformsバージョン:Install-Package Microsoft.ReportingServices.ReportViewerControl.WinForms

9.1ソリューションエクスプローラーでレポートビューアーのコントロールをパブリックに設定するformRptViewerの横にあるドロップダウンをクリックして、フォームを構成するファイルを表示します。このファイルを編集します。formRptViewer.Designer.csは、reprtviewerのコントロールをパブリックパブリックMicrosoft.Reportingに変更します。 .WinForms.ReportViewer ReportViewer1;

パートD:データテーブルを作成してレポート10に送信します。データテーブルを作成しますDataTable dataTableFutureVisits = new DataTable(); [データテーブルに独自のデータを入力する必要があります]11。Microsoft.Reporting.WinFormsを使用してusingステートメントを追加します。 12.データソースを設定し、レポートビューアの新しいインスタンスを作成します

ReportDataSource rs = new ReportDataSource();
            rs.Name = "DataSet1";
            rs.Value = dataTableFutureVisits;
            FormRptViewer frm = new FormRptViewer();
            frm.ReportViewer1.LocalReport.DataSources.Clear();
            frm.ReportViewer1.LocalReport.DataSources.Add(rs);
            frm.ReportViewer1.LocalReport.ReportEmbeddedResource = "ChiroRecallList.RptFutureVisits.rdlc";
            // name the report with date
            frm.ReportViewer1.LocalReport.DisplayName = "Your File Name Goes Here" + "_" + DateTime.Now.ToString("yyyyMMdd HH:mm");
            frm.ShowDialog();

パートE:レポートの更新:データテーブルに列を追加してレポートに表示する[列を削除するためのフォークも]

  1. データテーブルに列を追加します
  2. データを反映するようにオブジェクトクラスを変更します[パートAのように]
  3. レポートを開き、[データソースではなく]データセットを削除します
  4. ソリューションエクスプローラーの場合:プロパティドロップダウン展開があります
  5. datasourcesフォルダーを展開します
  6. モデルにちなんで名付けられたデータソースを削除します スクリーンショット

  7. ソリューションのクリーンアップと再構築 スクリーンショット

  8. レポートを開き、データソースを右クリックして、新しいデータセットを追加します スクリーンショット
0
Shane.A

Visual Studio 2017のASP.NETMVCプロジェクトでRDLCレポートを作成しようとしたときに、これと同じ問題が発生したので、これを別の回答として追加して、これを明確にします。 2018年1月でもまだ問題です。

私のソリューションは、C#ライブラリプロジェクトとMVCクライアントプロジェクトで構成されていました。

レポートの追加(新しいアイテムの追加を選択してから、レポートWizardアイテムを選択)C#ライブラリプロジェクト内レポートWizardとデータが表示されますソース構成Wizard(データベース、サービス、またはオブジェクトをデータソースとして使用するかどうかを選択できます)その上にモーダル:

Report Wizard showing Data Source Configuration Wizard

一方、新しいレポートウィザードアイテムを追加することを選択するとMVCプロジェクト内データソース構成ウィザードなしでレポートWizardが表示されます。

Report Wizard without the Data Source Configuration Wizard

MVCプロジェクトにビジネスオブジェクトクラスを追加し、再コンパイルしてから、レポートをMVCプロジェクトに再度追加しようとしましたが、2番目のスクリーンショットが表示されたため、データソース構成が取得されていないようですWizard何らかの理由でMVCプロジェクトに追加する場合。

0
tomRedox