C#Winforms将DataTable绑定到ReportrViewer控件

时间:2014-12-02 07:49:34

标签: c# winforms binding datatable reportviewer

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

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

以下是我的报告表格的详细信息:

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

    以下是我用来构建dataTable并将其绑定到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中看到正确的报告,但似乎绑定不起作用!运行代码时我没有遇到任何错误!

    任何帮助都会非常感谢!

1 个答案:

答案 0 :(得分:0)

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

this.reportViewer1.DataBind();

检查StuartLC的{​​{1}}回答。


另一点。您的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);  
    }
}