自动生成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
posted @ 2010-08-29 11:15  基础软件  阅读(1442)  评论(0编辑  收藏  举报