C# Winforms将DataTable绑定到ReportrViewer控件

本文关键字:ReportrViewer 控件 绑定 DataTable Winforms | 更新日期: 2023-09-27 18:32:41

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

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

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

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

下面是我用来构建 dataTable 并将其绑定到 ReportViewer 的代码:

/

将列添加到数据表(总共 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将DataTable绑定到ReportrViewer控件

我认为您错过了最后显式绑定数据(在 refresh(( 之前(:

this.reportViewer1.DataBind();

查看StuartLC问题的答案。


还有一点。可以优化您的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);  
    }
}