在水晶報表中顯示多個鏈接的數據表內容


  在水晶報表中,如果顯示多個數據表內容?起初我想到的是使用子報表,通過代碼動態的綁定數據源給子報表,來顯示所需數據。不過,最近發現,使用子報表顯示的某些字段無法顯示,就連前些日子寫的那篇“動態顯示圖片”都無法顯示了,不知道是不是水晶報表組件中哪里的設置問題。從此看來使用子報表並不是明智之舉。
  第二想到的,並是使用一個數據集,添加關系鏈接,加入相應的數據表,然后綁定給水晶報表。經過幾番周折,終於撥雲見彩虹了,呵呵。

一、添加一個XML架構,定義各表的字段名稱及類型

說明:上表中xxbg是一個人員的基本信息表,gzjl是一個工作經歷表,即個人信息顯示報表中要顯示他的工作經歷。

二、在Database Expert里加入此文件,添加以上兩個表,並添加鏈接


三、設計報表,將xxbg中的字段放在Report Header節中,將gzjl中的字段放在Details節中。

四、代碼實現

 1          private   void  Display()
 2          {
 3            //創建一個數據庫連接
 4            DataManager sql = Common.CreateDataManager();
 5            //定義報表對象
 6            rptXkbz rpt = new rptXkbz();
 7
 8            //提供給報表的數據集
 9            DataSet dstRpt = new DataSet();
10            //個人信息表
11            DataTable dtblTmp = sql.ExecuteToDataTable("select * from zjy_ryxxbg where bh='" + Request.QueryString["bh"+ "'");
12            //添加照片顯示字段
13            dtblTmp.Columns.Add("zpdata"typeof(byte[]));
14            if(dtblTmp.Rows[0]["zp"].ToString() != "")
15            {
16                dtblTmp.Rows[0]["zpdata"= GetFileStream(dtblTmp.Rows[0]["zp"].ToString());
17            }

18            //添加性別
19            dtblTmp.Columns.Add("xb1"typeof(string));
20            dtblTmp.Rows[0]["xb1"= dtblTmp.Rows[0]["xb"].ToString() == "True" ? "" : "";
21            //添加第一個表到數據集
22            dstRpt.Tables.Add(dtblTmp);
23            dtblTmp.TableName = "xxbg";
24            //添加第二個表到數據集
25            DataTable dtblTmp1 = sql.ExecuteToDataTable("select dlm,ksrq,jsrq,gzdw,xmmc from zjy_gzjl where dlm='" + dtblTmp.Rows[0]["dlm"+ "'").Copy();
26            dstRpt.Tables.Add(dtblTmp1);
27            dtblTmp1.TableName = "gzjl";
28
29            //建立兩表的關系鏈接
30            dstRpt.Relations.Add(new DataRelation("link", dtblTmp.Columns["dlm"], dtblTmp1.Columns["dlm"]));
31            rpt.SetDataSource(dstRpt);
32            crv.ReportSource = rpt;
33        }

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com