自动生成WebForm中对实体类的编辑页面
版權所有:基礎軟件。作者郵箱:sun.j.l.studio@gmail.com。本文首發于 http://www.cnblogs.com/FoundationSoft。文章轉載請保持此版權信息并注明出處。
在做ASP.NET WebForm程序時,經常需要編輯實體信息,實體通常對應于數據庫中一個表,在C#代碼中表示為一個實體類。這個編輯界面通常為字段標題加一個輸入文本框,重復N次。有幾個字段就重復幾次。當字段很多時,手工編寫這個代碼是一個非常繁瑣的重復勞動,讓人產生嚴重的厭煩情緒且毫無成就感。這種機械工作應該讓計算機自動去做而不是人手工做。我寫了一個類能夠自動生成這個編輯界面。
雖然DetailsView和FormView可以生成生成編輯界面,但是這種界面格式比較固定,而且耦合在另外一個數據綁定控件中,不容易定制和修改。因此,有時候還是需要直接在頁面上做編輯界面。
我寫的自動生成編輯界面的代碼能夠根據指定的列數生成以table布局的編輯界面。有兩個參數,第一個參數為實體類型,所生成的界面就是用來編輯此實體類型的數據的,第二個參數為每行的字段數,是指在生成的table中每行編輯幾個字段。代碼 如下。
1 /// <summary>2 /// 此類可以自動生成ASP.NTP WebForm上的table布局的編輯界面。
3 /// </summary>
4 /// <remarks>
5 /// 作者:孫繼磊 日期:2010-08-29
6 /// </remarks>
7 ? public class WebUiHelper
8 {
9 /// <summary>
10 /// 根據實體類型生成對此類型的編輯界面
11 /// </summary>
12 /// <param name="type">類型</param>
13 /// <param name="columnNum">每行的列數</param>
14 /// <returns>生成的html代碼</returns>
15 ? public string generateUiCode(Type type,int columnNum)
16 {
17 StringBuilder sb = new StringBuilder();
18 //只考慮類中定義的公共屬性,不考慮繼承屬性
19 ? BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly;
20 PropertyInfo[] properties = type.GetProperties(flags);
21 int count = 0;
22 sb.Append("<table>"+Environment.NewLine);
23 foreach (PropertyInfo f in properties)
24 {
25 //第一列添加<tr>標記
26 ? if (count % columnNum == 0)
27 sb.Append("<tr>" + Environment.NewLine);
28 //這個td為列標題
29 ? sb.Append("<td>");
30 sb.Append(f.Name);
31 sb.Append("</td><td>");
32 //這個td為編輯區域(一個TextBox)
33 ? sb.Append("<asp:TextBox runat=\"server\" ");
34 sb.Append(" ID=\"" + f.Name + "TextBox\" />");
35 sb.Append("</td>");
36 sb.Append(Environment.NewLine);
37 //最后一列添加</tr>標記
38 ? if (count % columnNum == (columnNum - 1))
39 sb.Append("</tr>" + Environment.NewLine);
40 count++;
41 }
42 sb.Append("</table>" + Environment.NewLine);
43 return sb.ToString();
44 }
45 }
自動生成的代碼如下(UserInfo類,每行2列)。
自動生成的代碼 1 <table>2 ?<tr>
3 ?<td>Id</td><td><asp:TextBox runat="server" ID="IdTextBox" /></td>
4 ?<td>Name</td><td><asp:TextBox runat="server" ID="NameTextBox" /></td>
5 ?</tr>
6 ?<tr>
7 ?<td>Password</td><td><asp:TextBox runat="server" ID="PasswordTextBox" /></td>
8 <td>Gender</td><td><asp:TextBox runat="server" ID="GenderTextBox" /></td>
9 </tr>
10 <tr>
11 <td>DateOfBirth</td><td><asp:TextBox runat="server" ID="DateOfBirthTextBox" /></td>
12 <td>WorkFromDate</td><td><asp:TextBox runat="server" ID="WorkFromDateTextBox" /></td>
13 </tr>
14 <tr>
15 <td>NationId</td><td><asp:TextBox runat="server" ID="NationIdTextBox" /></td>
16 <td>HomeTown</td><td><asp:TextBox runat="server" ID="HomeTownTextBox" /></td>
17 </tr>
18 <tr>
19 <td>PoliticsStatusId</td><td><asp:TextBox runat="server" ID="PoliticsStatusIdTextBox" /></td>
20 <td>DepartmentId</td><td><asp:TextBox runat="server" ID="DepartmentIdTextBox" /></td>
21 </tr>
22 <tr>
23 <td>RoleId</td><td><asp:TextBox runat="server" ID="RoleIdTextBox" /></td>
24 <td>MobilePhone</td><td><asp:TextBox runat="server" ID="MobilePhoneTextBox" /></td>
25 </tr>
26 <tr>
27 <td>OfficePhone</td><td><asp:TextBox runat="server" ID="OfficePhoneTextBox" /></td>
28 <td>Fax</td><td><asp:TextBox runat="server" ID="FaxTextBox" /></td>
29 </tr>
30 <tr>
31 <td>Email</td><td><asp:TextBox runat="server" ID="EmailTextBox" /></td>
32 <td>IsTempUser</td><td><asp:TextBox runat="server" ID="IsTempUserTextBox" /></td>
33 </tr>
34 <tr>
35 <td>RegisterDate</td><td><asp:TextBox runat="server" ID="RegisterDateTextBox" /></td>
36 <td>LastLoginTime</td><td><asp:TextBox runat="server" ID="LastLoginTimeTextBox" /></td>
37 </tr>
38 <tr>
39 <td>Department</td><td><asp:TextBox runat="server" ID="DepartmentTextBox" /></td>
40 <td>DepartmentReference</td><td><asp:TextBox runat="server" ID="DepartmentReferenceTextBox" /></td>
41 </tr>
42 <tr>
43 <td>Nation</td><td><asp:TextBox runat="server" ID="NationTextBox" /></td>
44 <td>NationReference</td><td><asp:TextBox runat="server" ID="NationReferenceTextBox" /></td>
45 </tr>
46 <tr>
47 <td>PoliticsStatus</td><td><asp:TextBox runat="server" ID="PoliticsStatusTextBox" /></td>
48 <td>PoliticsStatusReference</td><td><asp:TextBox runat="server" ID="PoliticsStatusReferenceTextBox" /></td>
49 </tr>
50 <tr>
51 <td>UserRole</td><td><asp:TextBox runat="server" ID="UserRoleTextBox" /></td>
52 <td>UserRoleReference</td><td><asp:TextBox runat="server" ID="UserRoleReferenceTextBox" /></td>
53 </tr>
54 <tr>
55 <td>DepartmentName</td><td><asp:TextBox runat="server" ID="DepartmentNameTextBox" /></td>
56 <td>NationName</td><td><asp:TextBox runat="server" ID="NationNameTextBox" /></td>
57 </tr>
58 <tr>
59 <td>PoliticsName</td><td><asp:TextBox runat="server" ID="PoliticsNameTextBox" /></td>
60 </table>
61
轉載于:https://www.cnblogs.com/FoundationSoft/archive/2010/08/29/1811787.html
總結
以上是生活随笔為你收集整理的自动生成WebForm中对实体类的编辑页面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]蓝牙基带数据传输机理分析
- 下一篇: 视频检索扫盲 (一)