因为最近的项目里面涉及到一张三层关系的报表,原来用的控件达不到这个需求,这时有想到用grid++ 但对这个不是很熟,我们公司有在用是CS的,后来想想还是自己花点功夫把原来Delphi开发的插件在扩展一下就可以了,距离上次开发这个控件当中已经近4年半载没去碰dephi了,这下又得从新去下了哥开发环境安装了,和安装了fastreport插件重新把原来的代码打开进行烦心新添加了参数和函数。虽然有点生疏但查了下资料还是能马上应手的,折腾几个小时终于搞定并测试了中间也有点小插曲,但还是比较顺利的。
delphi开发界面如图
模版设计
调用后打印如图
打印预览页面代码
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1
//
------------------------------------------------------------
2 // All Rights Reserved , Copyright (C) 2008 , Jamsoft , Ltd.
3 // ------------------------------------------------------------
4
5 using System;
6 using System.Configuration;
7 using System.Data;
8 using System.Data.OleDb;
9 using System.Linq;
10 using System.Web;
11 using System.Web.Security;
12 using System.Web.UI;
13 using System.Web.UI.HtmlControls;
14 using System.Web.UI.WebControls;
15 using System.Web.UI.WebControls.WebParts;
16 using System.Xml.Linq;
17 using System.IO;
18
19 /// <remarks>
20 /// 报表
21 /// PrintView
22 ///
23 /// 修改纪录
24 ///
25 /// 版本:1.0 2009.07.22 LiangMingMing 创建代码
26 ///
27 /// 版本:1.0
28 /// <author>
29 /// <name> LiangMingMing </name>
30 /// <date> 2009.07.22 </date>
31 /// </author>
32 /// </remarks>
33 public partial class PrintView : System.Web.UI.Page
34 {
35 // ****************************************************************************************************
36 // * *
37 // * 定义公共变量 *
38 // * *
39 // ****************************************************************************************************
40
41 // ****************************************************************************************************
42 // * *
43 // * 初始化 *
44 // * *
45 // ****************************************************************************************************
46
47 #region private void PageOnLoad() 页面初次加载时的动作
48 /// <summary>
49 /// 页面初次加载时的动作
50 /// </summary>
51 private void PageOnLoad()
52 {
53 this.txtFilePath.Value = " 1.fr3 ";
54 // 获取参数
55 this.GetParamter();
56 String scriptString = " \n TestAX.XML_DataSet = document.all('txtDataSet').value; ";
57 scriptString += " \n TestAX.XML_SubDataSet = document.all('txtSubDataSet').value; ";
58 scriptString += " \n TestAX.XML_SubSubDataSet = document.all('txtSubSubDataSet').value; ";
59 scriptString += " \n TestAX.SubRelation = document.all('txtSubRelation').value; ";
60 scriptString += " \n TestAX.SubSubRelation = document.all('txtSubSubRelation').value; ";
61 scriptString += " \n TestAX.SubMasterFields = document.all('txtSubMasterFields').value; ";
62 scriptString += " \n TestAX.SubSubMasterFields = document.all('txtSubSubMasterFields').value; ";
63 scriptString += " \n TestAX.UserName = document.all('txtUserName').value; ";
64 scriptString += " \n TestAX.SubUserName = document.all('txtSubUserName').value; ";
65 scriptString += " \n TestAX.SubSubUserName = document.all('txtSubSubUserName').value; ";
66 scriptString += " \n TestAX.PathString = document.all('txtFilePath').value; ";
67 // ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "PassSucceed", "alert('提示信息: 审核通过.');",
68 Page.ClientScript.RegisterStartupScript( this.GetType(), " OnInitControl ", " <script language='JavaScript'type='text/javascript'> " + scriptString + " \n</script> ");
69 }
70 #endregion
71
72 // ****************************************************************************************************
73 // * *
74 // * 操作方法 *
75 // * *
76 // ****************************************************************************************************
77
78 #region private void GetParamter() 读取参数
79 /// <summary>
80 /// 读取参数
81 /// Session["_DSReport"]:数据集 主表(不可缺少)、【子表】可省略、【孙表】可省略
82 /// SubRelation 子表对应主表的关系 值:"12"(代表第一个为主表),"23"(代表第三个为主表)
83 /// SuSubRelation 孙表对应主表的关系 值:"13"(代表第一个为主表),"23"(代表第二个为主表)
84 /// SubMasterFields 子表对应主表的字段
85 /// SubSubMasterFields 孙表对应主表的字段
86 /// UserName 主表数据集在FastReport设计Data显示的名称
87 /// SubUserName 子表数据集在FastReport设计Data显示的名称
88 /// SubSubUserName 孙表数据集在FastReport设计Data显示的名称
89 /// </summary>
90 private void GetParamter()
91 {
92 if (Request.QueryString[ " SubRelation "] != null)
93 {
94 this.txtSubRelation.Value = Request.QueryString[ " SubRelation "].ToString();
95 }
96 if (Request.QueryString[ " SubSubRelation "] != null)
97 {
98 this.txtSubSubRelation.Value = Request.QueryString[ " SubSubRelation "].ToString();
99 }
100 if (Request.QueryString[ " SubMasterFields "] != null)
101 {
102 this.txtSubMasterFields.Value = Request.QueryString[ " SubMasterFields "].ToString();
103 }
104 if (Request.QueryString[ " SubSubMasterFields "] != null)
105 {
106 this.txtSubSubMasterFields.Value = Request.QueryString[ " SubSubMasterFields "].ToString();
107 }
108 if (Request.QueryString[ " UserName "] != null)
109 {
110 this.txtUserName.Value = Request.QueryString[ " UserName "].ToString();
111 }
112 if (Request.QueryString[ " SubUserName "] != null)
113 {
114 this.txtSubUserName.Value = Request.QueryString[ " SubUserName "].ToString();
115 }
116 if (Request.QueryString[ " SubSubUserName "] != null)
117 {
118 this.txtSubSubUserName.Value = Request.QueryString[ " SubSubUserName "].ToString();
119 }
120 DataSet dataSet = this.Session[ " _DSReport "] as DataSet;
121 if (dataSet != null)
122 {
123 if (dataSet.Tables.Count > 0)
124 {
125 this.txtDataSet.Value = Common.DataSetToString(dataSet.Tables[ 0]);
126 }
127 if (dataSet.Tables.Count > 1)
128 {
129 this.txtSubDataSet.Value = Common.DataSetToString(dataSet.Tables[ 1]);
130 }
131 if (dataSet.Tables.Count > 2)
132 {
133 this.txtSubSubDataSet.Value = Common.DataSetToString(dataSet.Tables[ 2]);
134 }
135 }
136 }
137 #endregion
138
139 // ****************************************************************************************************
140 // * *
141 // * 事件方法 *
142 // * *
143 // ****************************************************************************************************
144
145 #region protected void Page_Load(object sender, EventArgs e)加载
146 /// <summary>
147 /// 加载
148 /// </summary>
149 /// <param name="sender"></param>
150 /// <param name="e"></param>
151 protected void Page_Load( object sender, EventArgs e)
152 {
153 if (!Page.IsPostBack)
154 {
155 // 页面初次加载时的动作
156 this.PageOnLoad();
157 }
158 }
159 #endregion
160 }
2 // All Rights Reserved , Copyright (C) 2008 , Jamsoft , Ltd.
3 // ------------------------------------------------------------
4
5 using System;
6 using System.Configuration;
7 using System.Data;
8 using System.Data.OleDb;
9 using System.Linq;
10 using System.Web;
11 using System.Web.Security;
12 using System.Web.UI;
13 using System.Web.UI.HtmlControls;
14 using System.Web.UI.WebControls;
15 using System.Web.UI.WebControls.WebParts;
16 using System.Xml.Linq;
17 using System.IO;
18
19 /// <remarks>
20 /// 报表
21 /// PrintView
22 ///
23 /// 修改纪录
24 ///
25 /// 版本:1.0 2009.07.22 LiangMingMing 创建代码
26 ///
27 /// 版本:1.0
28 /// <author>
29 /// <name> LiangMingMing </name>
30 /// <date> 2009.07.22 </date>
31 /// </author>
32 /// </remarks>
33 public partial class PrintView : System.Web.UI.Page
34 {
35 // ****************************************************************************************************
36 // * *
37 // * 定义公共变量 *
38 // * *
39 // ****************************************************************************************************
40
41 // ****************************************************************************************************
42 // * *
43 // * 初始化 *
44 // * *
45 // ****************************************************************************************************
46
47 #region private void PageOnLoad() 页面初次加载时的动作
48 /// <summary>
49 /// 页面初次加载时的动作
50 /// </summary>
51 private void PageOnLoad()
52 {
53 this.txtFilePath.Value = " 1.fr3 ";
54 // 获取参数
55 this.GetParamter();
56 String scriptString = " \n TestAX.XML_DataSet = document.all('txtDataSet').value; ";
57 scriptString += " \n TestAX.XML_SubDataSet = document.all('txtSubDataSet').value; ";
58 scriptString += " \n TestAX.XML_SubSubDataSet = document.all('txtSubSubDataSet').value; ";
59 scriptString += " \n TestAX.SubRelation = document.all('txtSubRelation').value; ";
60 scriptString += " \n TestAX.SubSubRelation = document.all('txtSubSubRelation').value; ";
61 scriptString += " \n TestAX.SubMasterFields = document.all('txtSubMasterFields').value; ";
62 scriptString += " \n TestAX.SubSubMasterFields = document.all('txtSubSubMasterFields').value; ";
63 scriptString += " \n TestAX.UserName = document.all('txtUserName').value; ";
64 scriptString += " \n TestAX.SubUserName = document.all('txtSubUserName').value; ";
65 scriptString += " \n TestAX.SubSubUserName = document.all('txtSubSubUserName').value; ";
66 scriptString += " \n TestAX.PathString = document.all('txtFilePath').value; ";
67 // ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "PassSucceed", "alert('提示信息: 审核通过.');",
68 Page.ClientScript.RegisterStartupScript( this.GetType(), " OnInitControl ", " <script language='JavaScript'type='text/javascript'> " + scriptString + " \n</script> ");
69 }
70 #endregion
71
72 // ****************************************************************************************************
73 // * *
74 // * 操作方法 *
75 // * *
76 // ****************************************************************************************************
77
78 #region private void GetParamter() 读取参数
79 /// <summary>
80 /// 读取参数
81 /// Session["_DSReport"]:数据集 主表(不可缺少)、【子表】可省略、【孙表】可省略
82 /// SubRelation 子表对应主表的关系 值:"12"(代表第一个为主表),"23"(代表第三个为主表)
83 /// SuSubRelation 孙表对应主表的关系 值:"13"(代表第一个为主表),"23"(代表第二个为主表)
84 /// SubMasterFields 子表对应主表的字段
85 /// SubSubMasterFields 孙表对应主表的字段
86 /// UserName 主表数据集在FastReport设计Data显示的名称
87 /// SubUserName 子表数据集在FastReport设计Data显示的名称
88 /// SubSubUserName 孙表数据集在FastReport设计Data显示的名称
89 /// </summary>
90 private void GetParamter()
91 {
92 if (Request.QueryString[ " SubRelation "] != null)
93 {
94 this.txtSubRelation.Value = Request.QueryString[ " SubRelation "].ToString();
95 }
96 if (Request.QueryString[ " SubSubRelation "] != null)
97 {
98 this.txtSubSubRelation.Value = Request.QueryString[ " SubSubRelation "].ToString();
99 }
100 if (Request.QueryString[ " SubMasterFields "] != null)
101 {
102 this.txtSubMasterFields.Value = Request.QueryString[ " SubMasterFields "].ToString();
103 }
104 if (Request.QueryString[ " SubSubMasterFields "] != null)
105 {
106 this.txtSubSubMasterFields.Value = Request.QueryString[ " SubSubMasterFields "].ToString();
107 }
108 if (Request.QueryString[ " UserName "] != null)
109 {
110 this.txtUserName.Value = Request.QueryString[ " UserName "].ToString();
111 }
112 if (Request.QueryString[ " SubUserName "] != null)
113 {
114 this.txtSubUserName.Value = Request.QueryString[ " SubUserName "].ToString();
115 }
116 if (Request.QueryString[ " SubSubUserName "] != null)
117 {
118 this.txtSubSubUserName.Value = Request.QueryString[ " SubSubUserName "].ToString();
119 }
120 DataSet dataSet = this.Session[ " _DSReport "] as DataSet;
121 if (dataSet != null)
122 {
123 if (dataSet.Tables.Count > 0)
124 {
125 this.txtDataSet.Value = Common.DataSetToString(dataSet.Tables[ 0]);
126 }
127 if (dataSet.Tables.Count > 1)
128 {
129 this.txtSubDataSet.Value = Common.DataSetToString(dataSet.Tables[ 1]);
130 }
131 if (dataSet.Tables.Count > 2)
132 {
133 this.txtSubSubDataSet.Value = Common.DataSetToString(dataSet.Tables[ 2]);
134 }
135 }
136 }
137 #endregion
138
139 // ****************************************************************************************************
140 // * *
141 // * 事件方法 *
142 // * *
143 // ****************************************************************************************************
144
145 #region protected void Page_Load(object sender, EventArgs e)加载
146 /// <summary>
147 /// 加载
148 /// </summary>
149 /// <param name="sender"></param>
150 /// <param name="e"></param>
151 protected void Page_Load( object sender, EventArgs e)
152 {
153 if (!Page.IsPostBack)
154 {
155 // 页面初次加载时的动作
156 this.PageOnLoad();
157 }
158 }
159 #endregion
160 }