ASP.NET动态增加控件 应用篇(一)
在写了这麽多篇後,相信读者 应该 对於 动态控件 有一定的认识,下面 来介绍 藉由动态产生控件来产生,一般企业 常用的表单
目前动态控件的使用上依我经验是比较适合用在,制式表单上,也就是格式、风格很类似的表单上,像是公司常用的请假单、出差单、销售订单、采购订单 等等单据类。
首先,先新增MyBase 这各类,这各类的用途,同前篇的介绍,主要在封装一些 函式,目的在让 後面继承者,只需考虑 介面、处理介面上使用者所输入的值,
而整各网页的架构,都会在MyBase 中设定好,藉以实现 我前面所说,制定开发标准的目的
MyBase.aspx.cs
MyBase
1 using System;
2 using System.Data;
3 using System.Collections;
4 using System.Web.UI;
5 using System.Web.UI.WebControls;
6 using System.Web.UI.HtmlControls;
7 using System.Text;
8 using System.Configuration;
9
10 public class MyBase : System.Web.UI.Page{
11
12 protected HtmlGenericControl sourceTag;
13 protected Button btnSubmit;
14
15 protected override void OnInit(EventArgs e)
16 {
17 base.OnInit(e);
18 HtmlGenericControl msgTag = new HtmlGenericControl();
19 msgTag.ID = "divMsg";
20 sourceTag.Controls.Add(msgTag);
21
22 Button btnSubmit = new Button();
23 btnSubmit.Click += new EventHandler(SubmitBtn_Click);
24 btnSubmit.Text = "SAVE";
25 sourceTag.Controls.Add(btnSubmit);
26
27 Table myTable = new Table();
28 sourceTag.Controls.Add(myTable);
29 dealTableData(myTable);
30 }
31
32 public virtual void dealTableData(Table myTable)
33 {
34
35 }
36 public virtual void SubmitBtn_Click(Object sender, EventArgs e)
37 {
38 }
39 public virtual void ShowMessage(string msg)
40 {
41 HtmlGenericControl msgTag = (HtmlGenericControl)sourceTag.FindControl("divMsg");
42 LiteralControl lc;
43 lc = new LiteralControl(msg + "<br>");
44 msgTag.Controls.Add(lc);
45 }
46 }
再来,会新增两各公用类,cusTable, TxtItem,为了让读者能快速看到程式执行结果,这两各类,可以 先放到MyBase.aspx.cs 这里面,就不用预先编译,就能向前篇一样,直接就能看到 程式结果,这样 也方便 读者 能直接 测试、修改,来了解其中程式码。
CusTable 是为了来帮助动态 产生 控件使用的一个类,他封装了动态产生的重复使用的程式码,使其更容易被呼叫使用。
TxtItem 是一个Value Object 用来存取,产生 控件 所需要设定的参数。一般参数传递,都是在函数介面中定义所需参数,但一旦这函数用多了以後,想要再去调整,这工程就很大了。
而改用Value Object 这样做就可以将所需参数全部封装在里面,既使後面有需调整参数,也不需去修改介面,另一各好处是,可以藉由该Object 来规范参数的值,该如何设定,例如Width 如只能在1-100 间设定,就可以像如下程式一般来规范。
1 public int TitleWidth
2 {
3 get
4 {
5 return _TitleWidth;
6 }
7 set
8 {
9 if(value < 0)
10 _TitleWidth = 0;
11 else if (value > 100)
12 _TitleWidth = 100;
13 else
14 _TitleWidth = value;
15 }
16 }
在这同时,我们藉由 这两各 类,就也能规范,使用者 画面产生的 方式 跟标准,可以 让 每各开发者,开发出来的介面都有着相似的外观跟特性。
这让我想到,我之前User 最常在讲,为什麽你们团队 开发出来的画面,都不太一样,有的 靠左对齐,有的是 置中,等等,作为一个管理者,想管好这些,老是靠 文件规范、人工测试等等,都是很吃力的事情,而且会疏失...
cusTable
1 public class cusTable
2 {
3 Table myTable;
4 TableRow tr;
5
6 public cusTable(Table fTable)
7 {
8 myTable = fTable;
9 tr = null;
10 }
11
12 public void AddEditControl(TxtItem ti)
13 {
14 AddLabel(ti.Caption, ti.TitleWidth);
15 AddTextBox(ti);
16 }
17
18 public TextBox AddTextBox(TxtItem ti)
19 {
20 TextBox tb = new TextBox();
21 tb.ID = ti.ID;
22 tb.Text = ti.Value;
23 AddControl(tb, ti.EditWidth);
24 return tb;
25 }
26 public Label AddLabel(string title, int width)
27 {
28 Label lb = new Label();
29 lb.Text = title;
30 AddControl(lb, width);
31 return lb;
32 }
33 public Button AddButton(TxtItem ti)
34 {
35 Button btn = new Button();
补充:Web开发 , ASP.Net ,