【问题标题】:C# Winforms binding a DataTable to a ReportrViewer controlC# Winforms 将 DataTable 绑定到 ReportrViewer 控件
【发布时间】:2015-01-30 09:33:29
【问题描述】:

我在尝试使用 c# 将 dataTable 绑定到 Winform 中的 ReportViewer 控件时遇到一些问题。

我花了很多时间在这个论坛和其他论坛中寻找解决方案,但遗憾的是到目前为止还没有找到。 我已将调试标记放入我的代码中,并且可以使用正确的 2x2 数组摘要报告“查看”完成的数据表。但是当我尝试将 dataTable 绑定到 ReportViewer 对象时,我得到一个空白屏幕。我确定我的编码中缺少一些简单的东西,但看不到它是什么!!!

以下是我的报告表单的更多详细信息:

  1. 我有 2 个全局字段定义如下:
    /*create global dataTable */
    DataTable _dTable = new DataTable("dtQOPS3710");

    /* create a new Dataset...*/
    Dataset _dSet = new Dataset("psysReporting.dSetReportViewer.xsd");

这是我用来构建数据表并将其绑定到 ReportViewer 的代码:

/向dataTable添加列(共10列)/

        _dTable.Columns.Add(new DataColumn("Nationality", typeof(String)));
        _dTable.Columns.Add(new DataColumn("Total_Females", typeof(String)));
        _dTable.Columns.Add(new DataColumn("Total_Males", typeof(String)));
        _dTable.Columns.Add(new DataColumn("Elig.55", typeof(String)));
        _dTable.Columns.Add(new DataColumn("Elig.56", typeof(String)));
        _dTable.Columns.Add(new DataColumn("Elig.57", typeof(String)));
        _dTable.Columns.Add(new DataColumn("Elig.58", typeof(String)));
        _dTable.Columns.Add(new DataColumn("Elig.25", typeof(String)));
        _dTable.Columns.Add(new DataColumn("Elig.26", typeof(String)));
        _dTable.Columns.Add(new DataColumn("Total_Patients", typeof(String)));

        /* now add the rows */
        for (int i = 0; i < _intMaxNoOfRows; i++)
        {
            DataRow dataRow = _dTable.NewRow();

            for (int j = 0; j < _maxJ; j++)
            {
                if (strArrayList[i, 1] != string.Empty)   /* column 1 = Nationality */
                    dataRow[j] = strArrayList[i, j];
            }

            if (strArrayList[i, 1] != string.Empty)        /* column 1= Nationality */
            {
               _dTable.Rows.Add(dataRow);  
            }

        }

        // add datatable '_dTable' to dataset '_dSet'...
        _dSet.Tables.Add(_dTable); 

        // bind dataSet to report viewer
        this.reportViewer1.Reset();
        this.reportViewer1.ProcessingMode = ProcessingMode.Local;
        this.reportViewer1.LocalReport.ReportEmbeddedResource = "psysReporting.Report1.rdlc";
        this.reportViewer1.LocalReport.DataSources.Clear();
        this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource(_dTable.TableName, _dTable));

        this.reportViewer1.Refresh();

如上所述,我已尝试调试代码,并且可以在 dataTable 中看到正确的报告,但绑定似乎不起作用!运行代码时我没有收到任何错误!

任何帮助将不胜感激!

【问题讨论】:

    标签: c# winforms binding datatable reportviewer


    【解决方案1】:

    我认为您错过了在末尾显式绑定数据(在 refresh() 之前):

    this.reportViewer1.DataBind();
    

    查看StuartLCthis question的回答。


    还有一点。您的for 循环可以优化。测试国籍不依赖于循环变量j。试试这个(你的问题没有链接,只是说):

    // now add the rows
    for (int i = 0; i < _intMaxNoOfRows; i++)
    {
        // column 1 = Nationality
        if (!string.IsNullOrWhiteSpace(strArrayList[i, 1]))
        {
            var dataRow = _dTable.NewRow();
            for (int j = 0; j < _maxJ; j++)
                dataRow[j] = strArrayList[i, j];
    
            _dTable.Rows.Add(dataRow);  
        }
    }
    

    【讨论】:

    • 好的,所以我按照您的建议在我的代码中添加了以下行:this.reportViewer1.DataBindings.Add(new Binding(_dTable.TableName, _dTable, _dTable.ToString())); this.reportViewer1.Refresh();运行应用程序时出现以下错误。 :无法绑定到目标控件上的属性“dtQOPS3710”。参数名称:PropertyName 如何获取我的 DataTable 的属性名称?
    • 那么,这个问题解决了吗?请标记答案。如果您有其他问题(如您的属性“dtQOPS3710”所述),请打开另一个包含所有详细信息的问题。
    • 我通过将 datagridview 导出到 Excel 工作簿解决了这个问题!效果很好!
    猜你喜欢
    • 2014-04-19
    • 2013-05-26
    • 1970-01-01
    • 2010-10-30
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多