1

以下のコードを使用しようとしましたが、機能しません。

ReportDataSetSQLクエリを使用してレポートデータをに保存しました。後でこれをオブジェクトのとして設定しましたReportDataSetDataSourceCrystalReport

private void btnGenReport_Click(object sender, EventArgs e)
    {
        CrystalReport1 objRpt = new CrystalReport1();

        string sql; //creating sql query
        sql = "SELECT invoice.InvoiceNo, invoice.Date, invoiceitems.Name, invoice.InvoiceTo, invoice.CusName, invoiceitems.Qty, invoiceitems.Rate, invoiceitems.Amount ";
        sql += "FROM (invoice INNER JOIN invoiceitems ON invoice.Date = invoiceitems.Date) ";
        sql += "WHERE (invoice.Date BETWEEN '" + DateTimePickerFrom.Value + "' AND '" + DateTimePickerTo.Value + "');";

        ReportDataSet ds = new ReportDataSet();
            string path = Application.StartupPath + "\\";
        string conStr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + path + "SMS_DB.mdf;Integrated Security=True;User Instance=True";
        SqlConnection con = new SqlConnection(conStr); // create connection
        try
        {
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter(sql, con);
            da.Fill(ds, "InvoiceItemData");
            objRpt.SetDataSource(ds.Tables["InvoiceItemData"]);
            crystalReportViewer1.ReportSource = objRpt;
            con.close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error ! \n" + ex.ToString());
        }
    }
4

1 に答える 1

1

私はいくつかのことを仮定します:

  1. プロジェクトが Visual Studio 2010、.NET Framework 4、および VS2010 用の Crystal Reports ランタイムを使用していること
  2. 型指定されたデータセットReportDataSetが、データベース ファイル SMS_DB.mdf への接続を介して VS の Dataset Designer を使用してセットアップされ、このファイルにデータが既に存在すること
  3. 型指定された Crystal Reportが Report Designer 内でセットアップされ、データソースがプロジェクトの型指定されたデータセットrt1のテーブルであることInvoiceItemDataReportDataSet
  4. これらのコントロールはすべて同じフォームにあります
  5. VS2010 用の .NET Framework 4 と Crystal Reports ランタイムがインストールされているマシンで、これをまだデバッグしています。

つまり、すでにすべての設定が完了しbtnReportGen、最新の非ベータ環境でボタンのクリックまですべて完了し、これを実行しようとしていないという条件を想定しています。別のマシンでのリリース。

ここで、いくつかの提案と説明があります。

  1. この場合、型指定されたデータセットをレポート データソースとして使用していません。データセットはデータサーバーであり、データソースは型指定されたデータ テーブルです。そのため、コードで更新されたデータ テーブルをレポートに正しく送信しているのはこのためです。
  2. ピッカー コントロールとレポート ビューアーに個別の winform を使用し、生成ボタンを押したときにピッカー コントロール フォームからレポート ビューアー フォームを呼び出します。そうしないと、レポート ビューアーに不適切なデータが送信されるという問題が発生し、誤ったレポートが生成されるか、レポートがまったく生成されなくなります。
  3. レポート ドキュメントでパラメーターを使用し、ピッカー コントロールの値をレポート ドキュメントに送信してレポートに表示できるようにします。これにより、生成ボタンを押したときに、少なくとも正しい値を送信していることをユーザーに認識させることができます。
  4. ビューアー フォームに送信してクエリで使用する前に、コントロールの値が有効であることを確認してください。確認事項: 両方とも設定されていますか? どちらもデートですか?To 値は From 値以上ですか? 範囲はデータベースで有効ですか? (これにより、より役立つエラー メッセージをユーザーに表示し、エラー メッセージを正しいコントロールに送り返して修正できるようにするオプションも提供されます。)
  5. 型指定されたデータセットとデータセット デザイナーを既に使用しているため、提供されている型指定されたテーブル アダプターを使用し、デザイナー内でパラメーターを使用してカスタム クエリを作成し、そのクエリを使用してテーブルに入力します。これにより、プログラムですべてを実行しようとすることによって引き起こされる非常に多くの頭痛の種から解放されます。道具はそろっていますので、そちらをご利用ください。

上記のすべてを考慮すれば、正しく機能するプロジェクトを見つけることができると思います。ただし、それでも問題が解決しない場合は、各提案を確認し、スクリーンショットとサンプル コードを使用してすべてを修正することができます。私は VS2010 で膨大な種類の Crystal Report プロジェクトを作成しており、経験から、プログラマーとしてのあなたとユーザーにとって何が最も効果的かを説明しているだけなので、それを行う必要がある場合は問題ありません。プログラムですべてを入力してレポート ビューアーに表示するだけで、時間とリソースを節約できると思うかもしれませんが、それが連携しない理由でもあります。

于 2012-07-26T14:21:12.533 に答える