21

レポートにレコードを表示しようとしています。データはデータセットにあります。しかし、それは彼らに縛られていません。フォームが読み込まれると、レポートのレイアウトが表示されます。しかし、ボタンをクリックするとエラーが表示されます。以下は私のコードです。

using Microsoft.Reporting.WinForms;
//------------------------------------------------------------------
// <copyright company="Microsoft">
//     Copyright (c) Microsoft.  All rights reserved.
// </copyright>
//------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ReportsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            this.reportViewer1.RefreshReport();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            System.Data.DataSet ds = GetDataSet();
            //reportViewer1.LocalReport.ReportPath = "Report1.rdlc";
            ReportDataSource rds = new ReportDataSource("ProductsDataSet", ds.Tables[0]);
            this.reportViewer1.LocalReport.DataSources.Clear();
            this.reportViewer1.LocalReport.DataSources.Add(rds);
            this.bindingSource1.DataSource = rds;
            this.reportViewer1.RefreshReport();
        }

        private System.Data.DataSet GetDataSet()
        {
            System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection("Data Source=DELL;Initial Catalog=Products;Integrated Security=True");
            sqlConn.Open();
            string sql= string.Format ( @"select o.[User], o.OrderDate, o.Quantity, o.OrderDetail, c.ShopName, c.[Address], c.City, c.Ph, p.* from dbo.Clients c,dbo.Product_Service o,Product_D p,Junction j where o.ClientId = c.ClientId
                            and o.ProductId  = j.ProductId 
                                and j.PCode = p.PCode
                                  and o.ClientId = 41
                                        and o.OrderDate='11/9/2012';");

            System.Data.SqlClient.SqlDataAdapter ad = new System.Data.SqlClient.SqlDataAdapter(sql, sqlConn);
            System.Data.DataSet ds = new System.Data.DataSet();
            ad.Fill(ds);
            sqlConn.Close();
            return ds;
        }
    }
}

私のデータセットには3つのテーブルがあります。小さな矢印が表示されているレポート ビューアーの上部にあるバインド ソースを選択します。

4

10 に答える 10

32

Visual Studio.Net 2012 を使用してコードを編集しているときに ReportViewer のバージョン 10 を使用しているときに、この問題に遭遇しました。

エラー メッセージ内のデータ ソースの名前を取得することで解決策を見つけました (上記の場合は「Product_Detail」です)。次に、ソース コード ビューに移動し、ReportViewer、その DataSources、およびその ReportDataSource 内を見つけました。

ReportDataSource の Name プロパティを、エラー メッセージに記載されているデータ ソース (つまり、"Product_Detail") と同じに設定しました。

私と同じように、これがあなたにとってもうまくいくことを願っています。

また、ReportViewer コントロールの新しいバージョンを使用する余裕がある場合は、この問題が発生しないか、解決が容易になることがあります。

于 2013-08-29T22:43:57.933 に答える
12

「ProductsDataSet」は、指定する DataSource の名前です。あなたのエラーは、「Microsoft Reporting Service のデータ ソース “Product_Detail” にデータ ソース インスタンスが提供されていません」と言っています。

間違った名前を割り当てていると思います。

試す、

ReportDataSource rds = new ReportDataSource("Product_Detail", ds.Tables[0]);

レポートに "ProductsDataSet" というデータソースがある場合は、おそらく 2 つあり、使用していないものを削除するか、データソースにも割り当てます。

于 2012-11-12T16:18:37.063 に答える
0

この投稿が少し古いことは知っていますが、私の解決策を皆さんと共有したいと思います。

私のプロジェクトでは、「データ ソース 'dataset1' にデータ ソース インスタンスが提供されていません」という同じエラーが発生しました。そして、プロジェクトでコードファースト方式のエンティティ フレームワークを使用しました。

上記のエラーを解決するために、以下の手順に従います。

  1. レポート デザイナー (レポート ビューアー) でアクション矢印を選択します。
  2. そして、レポートの選択ドロップダウン リストから RDLC レポートを選択します。
  3. 「データソースを選択」を選択 データソースを選択
  4. 次に、必要なデータ ソースを選択します。強調表示された領域のドロップダウンからデータ ソース/バインディング ソースを選択します。
于 2019-04-20T05:38:35.563 に答える