[window form]使用report viewer遇到的小問題
最近在window form用report viewer,整理一下遇到的問題及找到的解法
1. 要改橫向列印:將page size改成11in X 8.5in,原先設定為 8.5in X 11in(直向)
2. 多印空白頁:確定主體的寬度是否過寬,A4的寬度為21公分(8.23英吋),修改成合適的寬度
3. 如何使用物件當做報表來源:參考下列網址
http://msdn.microsoft.com/zh-tw/library/ms251692(VS.80).aspx
4. 畫面不會更新:在webform跟windowform有點不同
web form
{
DropDownList b = (DropDownList)sender;
ObjectDataSource2.SelectParameters.Clear();
ObjectDataSource2.SelectMethod = "GetData";
ObjectDataSource2.SelectParameters.Add(new Parameter("CustomerID", DbType.String, b.SelectedValue));
//將查詢出的 orders 資料表資料提供給 DataSet2_Orders
ReportDataSource rds = new ReportDataSource("DataSet2_Orders", ObjectDataSource2.ID);
ReportViewer1.LocalReport.DataSources.Clear();
//將 資料 新增到 ReportViewer1 的 DataSources
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.Refresh(); // 給web form使用
ReportViewer1.Visible = true;
}
window form
{
//使用物件當作資料源
List<NewMediaTest1.Model.Report.EmpCustReportItem> reportitem = new List<NewMediaTest1.Model.Report.EmpCustReportItem>();
//取得資料
DataTable ds = GetQueryData();
foreach (DataRow dr in ds.Rows)
{
NewMediaTest1.Model.Report.EmpCustReportItem a = new NewMediaTest1.Model.Report.EmpCustReportItem(dr);
reports.Add(a);
}
//指定binding source
this.EmpCustReportItemBindingSource.DataSource = reportitem;
this.reportViewer1.RefreshReport(); // for window form
}之前在window from用Refresh(),報表不會重新產生,要用RefreshReport()才行
參考資料
ASP.NET - ReportViewer Control 使用心得(二) - 張小呆的碎碎唸- 點部落
逐步解說:在本機處理模式中,搭配 ReportViewer Web 伺服器控制項使用商務物件資料來源