簡體   English   中英

C#Winforms將DataTable綁定到ReportrViewer控件

[英]C# Winforms binding a DataTable to a ReportrViewer control

我在嘗試使用c#將數據表綁定到Winform中的ReportViewer控件時遇到一些問題。

我花了很多時間在這個論壇和其他論壇上進行拖網尋找解決方案,但是到目前為止還沒有找到。 我已經在代碼中放入了調試標記,並且可以使用正確的2x2數組摘要報告“查看”完成的dataTable。 但是,當我嘗試將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的代碼:

/ 在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中看到正確的報告,但是綁定似乎不起作用! 運行代碼時我沒有任何錯誤!

任何幫助將非常感激!

我認為您錯過了在結束時顯式綁定數據(在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);  
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM