[英]C# Winforms binding a DataTable to a ReportrViewer control
我在嘗試使用c#將數據表綁定到Winform中的ReportViewer控件時遇到一些問題。
我花了很多時間在這個論壇和其他論壇上進行拖網尋找解決方案,但是到目前為止還沒有找到。 我已經在代碼中放入了調試標記,並且可以使用正確的2x2數組摘要報告“查看”完成的dataTable。 但是,當我嘗試將dataTable綁定到ReportViewer對象時,出現空白屏幕。 我敢肯定我的編碼中缺少一些簡單的東西,但是看不到它是什么!!!
這是我的報告表格的更多詳細信息:
/*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.