1

アイデアは、新しいフィールドを入力して、レポートに表示することです http://www.mediafire.com/view/6sla63hpecx2cc9/workflow.PNG mediafire.com/view/1juiekfr5gbk48d/theproplem.GIF

私は DataSet でテーブルをフィルタリングし、データを表示すると仮定します。DataGridView で完璧に動作します。データグリッドを埋めるのと同じデータセットでレポートを埋める方法を見つけたいと思っています。

public partial class bill : Form
{
    SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=G:\I.S\C#\C#(Projects)\Nothin\billingSystem\billingSystem\Store.mdf;Integrated Security=True;User Instance=True");

    public bill(string Cusn,string su,string am,string to,string Di, string Cnum)
    {
        InitializeComponent();
        label1.Text = Cusn;
        label2.Text = su;
        label3.Text = am;
        label4.Text = to;
        label5.Text = Di;
        label6.Text = DateTime.Now.ToString("d/M/yyyy");
        label7.Text = Cnum;
    }

    private void bill_Load(object sender, EventArgs e)
    {
        LoadReport();
    }

    private void LoadReport()
    {

        int R = Convert.ToInt32(label7.Text);

        SqlDataAdapter ADAP = new SqlDataAdapter("Select * from Newbill where Con = '" + R + "'", cn);
        DataSet DS = new DataSet();
        ADAP.Fill(DS, "Store");
        dataGridView1.DataSource = DS.Tables["Store"];



        // TODO: This line of code loads data into the 'DataSet10.NewBill' table. You can move, or remove it, as needed.
        this.NewBillTableAdapter.Fill(this.DataSet10.NewBill, R);
        this.reportViewer1.RefreshReport();

        ReportParameter[] allPar = new ReportParameter[5]; // create parameters array
        ReportParameter parSu = new ReportParameter("Summation", label2.Text);
        ReportParameter parDiscount = new ReportParameter("Discount", label5.Text);
        ReportParameter parDisA = new ReportParameter("DiscountAmount", label3.Text);
        ReportParameter parTotal = new ReportParameter("Total", label4.Text);
        ReportParameter parCus = new ReportParameter("CustomerName", label1.Text);

        allPar[0] = parSu; //assign parameters to parameter array
        allPar[1] = parDiscount;
        allPar[2] = parTotal;
        allPar[3] = parDisA;
        allPar[4] = parCus;

        this.reportViewer1.LocalReport.SetParameters(allPar);
        this.reportViewer1.RefreshReport();
        // TODO: This line of code loads data into the 'DataSet1.NewBill' table. You can move, or remove it, as needed.
        //this.NewBillTableAdapter.Fill(this.DataSet1.NewBill, R, O);
        //this.reportViewer1.RefreshReport();
    }
}

これを見た : http://www.verious.com/qa/how-can-i-load-datatable-as-report-data-source/

実際には、クエリを使用して DB からデータを表示し、レポート内のデータをフィルター処理する手順が必要です。Google で見つけたものは次のとおりです: http://www.codeproject.com/Articles/31862/Dynamic-Binding-Of- RDLC-To-ReportViewer ですが、新しいフィールドが挿入されたときに機能しません。

これはどうですか、データセットを更新して、テーブルで発生した変更を含めようとします(私の場合、新しい行「新しいデータ」を挿入します)しかし、それは私に与えます:

A data source instance has not been supplied for the data source 'DataSet 10_NewBill'.


private void LoadReport()
        {
            int R = Convert.ToInt32(label7.Text);

            this.reportViewer1.LocalReport.DataSources.Clear();
            DataTable dt = new DataTable();
            dt = this.NewBillTableAdapter.GetData(R);

            ReportDataSource rprtDTSource = new ReportDataSource(dt.TableName, dt);

            this.reportViewer1.LocalReport.DataSources.Add(rprtDTSource);
            this.reportViewer1.RefreshReport(); 

            // TODO: This line of code loads data into the 'DataSet10.NewBill' table. You can move, or remove it, as needed.
            this.NewBillTableAdapter.Fill(this.DataSet10.NewBill,R );

            this.reportViewer1.RefreshReport();

            ReportParameter[] allPar = new ReportParameter[5]; // create parameters array
            ReportParameter parSu = new ReportParameter("Summation", label2.Text);
            ReportParameter parDiscount = new ReportParameter("Discount", label5.Text);
            ReportParameter parDisA = new ReportParameter("DiscountAmount", label3.Text);
            ReportParameter parTotal = new ReportParameter("Total", label4.Text);
            ReportParameter parCus = new ReportParameter("CustomerName", label1.Text);

            allPar[0] = parSu; //assign parameters to parameter array
            allPar[1] = parDiscount;
            allPar[2] = parTotal;
            allPar[3] = parDisA;
            allPar[4] = parCus;


            this.reportViewer1.LocalReport.SetParameters(allPar);
            this.reportViewer1.RefreshReport();
        }

この

    int R = Convert.ToInt32(label7.Text);
    SqlDataAdapter ADAP = new SqlDataAdapter("Select * from Newbill where Con = '" + R + "'", cn);
    DataSet DS = new DataSet();
    ADAP.Fill(DS, "Store");
    DataTable dt = new DataTable();
    dt.TableName = "Store";
    cn.Open();
    ADAP.Fill(dt);
    reportViewer1.ProcessingMode = ProcessingMode.Local;
    ReportDataSource source = new ReportDataSource("Store", dt);
    reportViewer1.LocalReport.DataSources.Clear();
    reportViewer1.LocalReport.DataSources.Add(source);
    reportViewer1.DataBind();
    reportViewer1.LocalReport.Refresh();
    cn.Close();

エラー 'Microsoft.Reporting.WinForms.ReportViewer' には 'DataBind' の定義が含まれておらず、タイプ 'Microsoft.Reporting.WinForms.ReportViewer' の最初の引数を受け入れる拡張メソッド 'DataBind' が見つかりませんでした

使用する際に必要な参照は何ですか?

4

4 に答える 4

1

まず、rpt オブジェクトを作成してから、データソースを設定します。
以下の手順に従ってください。

CrystalReport1 objRpt = new CrystalReport1();  //create your rpt object
objRpt.SetDataSource(Dataset.Tables["tablename"]);   //set datasource to your rpt.
cryRptViewer.ReportSource = objRpt;  //give rpt object to your crystal report viewer.
于 2013-06-21T16:22:14.033 に答える
0

WinFormsどちらをASP.NET使用していたかを指定しなかったため、両方の質問に答えようと思います。RefreshReport問題は、空のレポートを呼び出していることです...これはまさにそれを返します。空のレポート。

レポートの Win フォーム設定データソース

//First Create a `DataSource` for your Report:

ReportDataSource reportDataSource = new ReportDataSource();
reportDataSource.Name = "ReportData"; 
reportDataSource.Value = DS.Tables["Store"];

//Then bind the ReportViewer to that DataSource
this.reportViewer1.LocalReport.SetParameters(allPar);
this.reportViewer1.LocalReport.DataSources.Add(reportDataSource);   //This is what you are missing
this.reportViewer1.RefreshReport();

レポートの ASP.Net 設定データソース

//First Create a `DataSource` for your Report - Same as winforms

ReportDataSource reportDataSource = new ReportDataSource();
reportDataSource.Name = "ReportData"; 
reportDataSource.Value = DS.Tables["Store"];

//Then bind the ReportViewer to that DataSource
this.reportViewer1.LocalReport.SetParameters(allPar);
this.reportViewer1.LocalReport.DataSources.Add(reportDataSource);
this.reportViewer1.DataBind(); //This is the difference in ASP.Net   
this.reportViewer1.RefreshReport();

あなたの例から、SqlConnections 、ReportParameters 、およびDataTables を一日中セットアップできますが、設定されたものにバインドReportViewerしない限り、DataSet何も得られません。

于 2013-06-20T21:42:29.790 に答える