专栏首页更流畅、简洁的软件开发方式【自然框架】之鼠标点功能现(二):表单控件的“应用”—— 代码?只写需要的!

【自然框架】之鼠标点功能现(二):表单控件的“应用”—— 代码?只写需要的!

【自然框架】之鼠标点功能现(一):单表的增删改查(即上次5月23日活动的一个主题)【Demo、源码下载】

      看了大家的回复,好像不少人误会了,我为了突出“鼠标点,功能现”,所以没有说代码,没有贴代码,这就让一些人认为我想要完全抛弃VS,自己写一个“平台”来代替,不好意思,您高估我了,我可达不到。我只是想“简单的事情点鼠标就可以了,复杂的事情就要写代码了”。

      还是举例子吧。比如说上次里的【表8:添加列表信息】、【表9:功能按钮】(添加按钮)、【表12:修改查询条件】、【表13:调整表单布局】 、【表15:修改字段配置信息】、【表16:新闻管理】这几个图里面的表单页面,其实都是DataForm.aspx页面,就是说他们使用的是同一个页面。

 【表8:添加列表信息】

      说到这里您可能会想,这个页面得多复杂呀,是不是要写n多代码呀?其实很简单。贴个代码:

.aspx页面

1 <%@ Page validateRequest="false"  Language="C#" AutoEventWireup="true" CodeBehind="DataForm1.aspx.cs" Inherits="Nature.Manage.DataForm1" %>
 2 
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 
 5 <html xmlns="http://www.w3.org/1999/xhtml" >
 6 <head runat="server">
 7     <title><%=this.Lbl_Title.Text %></title>
 8     <%=CssWeb%> 
 9     <script language="javascript" type="text/javascript" src="/public/js/myreturn.js"></script>
10     <script language="javascript" type="text/javascript" src="/public/js/check.js"></script>
11     
12     <script language="javascript" type="text/javascript">
13         var fid = "";
14         
15         fid = "<%=ForeignID%>";
16         function myCheck()
17         {
18             return CheckForm();
19         }
20     
21         function myLoad()
22         {
23             if (myTxtID)
24                 if (document.getElementById(myTxtID))
25                     document.getElementById(myTxtID).focus();
26                     
27             
28         }
29         
30     </script>
31 </head>
32 <body>
33     <form id="form1" runat="server">
34     <div style="width:100%; font-size:12pt; text-align: center;vertical-align:middle;">
35         <asp:Label ID="Lbl_Title" runat="server" style="font-size:14pt; "></asp:Label>
36     </div>
37     <div style="width:100%; text-align: center;vertical-align:middle;">
38         <Nature:MyForm ID="myForm" runat="server" onformbinded="myForm_FormBinded" />
39         <asp:Button ID="Btn_Save" runat="server" Text=" 保 存 " />
40 &nbsp; 
41 &nbsp;</div>
42     </form>
43 </body>
44 </html>
45

一共就这么几行,主要是拽进来一个表单控件。

再看.aspx.cs页面。

1 using Nature;
 2 using Nature.Data;
 3 using Nature.Common;
 4 using Nature.WebControls;
 5 
 6 
 7 namespace Nature.Manage
 8 {
 9     /// <summary>
10     /// 通用表单页面
11     /// </summary>
12     public partial class DataForm1 : CommonClass.BasePageForm
13     {
14         protected void Page_Load(object sender, EventArgs e)
15         {
16 
17         }
18 
19         #region 保存记录,可以使添加,也可以是修改
20         protected override void Btn_Save_Click(object sender, EventArgs e)
21         {
22             this.myForm.SaveData();
23             Functions.PageRegisterJavascript(Page, "myReturn()");
24         }
25         #endregion
26 
27         #region 表单控件绑定后触发的事件
28         protected void myForm_FormBinded(object sender, EventArgs e)
29         {
30 
31             //获取表里面的外键字段
32 
33             string ForeignColumnID = dal.ExecuteString("select ForeignColumnID from Manage_Function_Info where FunctionID = " + this.FunctionID);
34             if (ForeignColumnID != null)
35             {
36                 //查找外键对应的控件
37                 MyTextBox txt = (MyTextBox)myForm.FindControl("c_" + ForeignColumnID);
38                 if (txt != null)
39                     txt.Text = base.ForeignID;
40             }
41 
42         }
43         #endregion
44 
45     }
46 }

还是这么几行,一点都不复杂,这个页面就是应对简单的添加、修改用的,简单的没有特殊需求的都可以用这个页面,但是如果遇到复杂的情况,那就要在单独写一个页面了,比如前面的【表6:添加节点】,要添加一个子节点,就要对几个字段进行计算,用这个页面就不适合了,但是我不会为了让DataForm.aspx能够添加节点,而去修改这个页面,而是在单独做一个页面 —— NoteMod.aspx 在这个页面里实现添加节点的功能。对了,添加节点有特殊的地方,但是修改节点就没有什么特殊的了,对于修改节点,那么就可以使用DataForm.aspx页面了。

 NoteMod.aspx 的代码:

1 <body>
 2     <form id="form1" runat="server">
 3     <div style="width:100%; font-size:12pt; text-align: center;vertical-align:middle;">
 4         <asp:Label ID="Lbl_Title" runat="server" style="font-size:14pt; "></asp:Label>
 5     </div>
 6     <div style="width:100%; text-align: center;vertical-align:middle;">
 7         <Nature:MyForm ID="myForm" runat="server" onformbinded="myForm_FormBinded" />
 8         <asp:Button ID="Btn_Save" runat="server" Text=" 保 存 " />
 9 &nbsp; 
10 &nbsp;</div>
11     </form>
12 </body>

NoteMod.aspx.cs代码:

1using Nature.User;
  2using Nature;
  3using Nature.Data;
  4using Nature.Common;
  5using Nature.WebControls;
  6
  7namespace Nature.Manage
  8{
  9    /**//// <summary>
 10    /// 功能节点的添加、修改
 11    /// </summary>
 12    public partial class NoteMod : CommonClass.BasePageForm   
 13    {
 14        protected void Page_Load(object sender, EventArgs e)
 15        {
 16
 17        }
 18
 19        保存节点#region 保存节点
 20        protected override void Btn_Save_Click(object sender, EventArgs e)
 21        {
 22            //判断序号是否重复的。
 23            MyTextBox txt = (MyTextBox)myForm.FindControl("c_1000090");
 24            string sort = txt.Text;
 25
 26            if (dal.ExecuteExists("select top 1 1 from Manage_Function where sort =" + sort))
 27            {
 28                string parentPath = dal.ExecuteString("select  ParentIDPath FROM Manage_Function WHERE (FunctionID = " + this.DataID + ")");
 29                if (parentPath != null)
 30                {
 31                    dal.ExecuteNonQuery("update Manage_Function set sort = sort + 100 where ParentIDPath + ',' like '" + parentPath + ",%'  and sort >= " + sort);
 32                }
 33            }
 34
 35            this.myForm.SaveData();
 36            Functions.PageRegisterJavascript(Page, "myReturn()");
 37        }
 38        #endregion
 39
 40        表单控件绑定后触发的事件#region 表单控件绑定后触发的事件
 41        protected void myForm_FormBinded(object sender, EventArgs e)
 42        {
 43            string FunctionID = "";
 44
 45            获取数据库里的最大的FunctionID#region 获取数据库里的最大的FunctionID
 46            FunctionID = dal.ExecuteString("select top 1 FunctionID from Manage_Function order by FunctionID desc ");
 47            FunctionID = (Int32.Parse(FunctionID) + 1).ToString();
 48
 49            SetFormControlValue(myForm, "1000010", FunctionID);//查找功能节点ID
 50
 51            SetFormControlValue(myForm, "1000050", FunctionID);//查找权限标识
 52
 53            #endregion
 54
 55
 56            //获取是要添加子节点,还是兄弟节点
 57            string addNoteKind = Request.QueryString["n"];
 58            if (addNoteKind == "1")
 59                AddSonNote();
 60            else
 61                AddBortherNote();
 62
 63            设置添加人等#region 设置添加人等
 64            SetFormControlValue(myForm, "1000130", MyUser.PersonID);//添加人
 65            SetFormControlValue(myForm, "1000150", MyUser.PersonID);//修改人
 66            SetFormControlValue(myForm, "1000120", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//添加日期
 67            SetFormControlValue(myForm, "1000140", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//修改日期
 68
 69            #endregion
 70        }
 71        #endregion
 72
 73        添加子节点#region 添加子节点
 74        /**//// <summary>
 75        /// 添加子节点
 76        /// </summary>
 77        private void AddSonNote()
 78        {
 79            设置其他信息#region 设置其他信息
 80            //                                                          0           1           2       3       4       5
 81            string[] funInfo = dal.ExecuteStringsBySingleRow("select ParentID, ParentIDPath, NoteLevel, Sort, WebURL, Target FROM Manage_Function WHERE (FunctionID = " + this.DataID + ")");
 82            if (funInfo != null)
 83            {
 84                //设置父节点
 85                SetFormControlValue(myForm, "1000020", this.DataID );//查找父节点
 86
 87                //设置父节点路径
 88                SetFormControlValue(myForm, "1000032", funInfo[1] + "," + this.DataID);//查找父节点路径
 89
 90                //设置级数
 91                SetFormControlValue(myForm, "1000060", (Int32.Parse(funInfo[2]) + 1).ToString());//查找级数
 92
 93                //设置网址
 94                SetFormControlValue(myForm, "1000100", funInfo[4]);//查找网址
 95
 96                //设置目标
 97                SetFormControlValue(myForm, "1000110", funInfo[5]);//查找目标
 98
 99                设置序号,子节点的情况#region 设置序号,子节点的情况
100                //获取指定的节点的所有子节点的最大序号序号。如果有则+100设置,等真正保存的时候在修改后面的序号。
101                //如果没有则本序号 + 100。
102
103                string sql = "select top 1 Sort from Manage_Function where ParentIDPath + ',' like '" + funInfo[1] + "," + this.DataID + ",%' and Sort > " + funInfo[3] + " order by sort desc";
104                string sort = dal.ExecuteString(sql);
105                if (sort != null)
106                {
107                    //有子节点,设置序号
108                    SetFormControlValue(myForm, "1000090", (Int32.Parse(sort) + 100).ToString());
109                }
110                else
111                {
112                    //选中的节点没有子节点
113                    sort = (Int32.Parse(funInfo[3]) + 100).ToString();
114
115                    //设置序号
116                    SetFormControlValue(myForm, "1000090", sort);
117
118                }
119                #endregion
120
121            }
122            #endregion
123
124            
125
126        }
127        #endregion
128
129        添加兄弟节点#region 添加兄弟节点
130        /**//// <summary>
131        /// 添加兄弟节点
132        /// </summary>
133        private void AddBortherNote()
134        {
135            设置其他信息#region 设置其他信息
136            //获取指定节点的信息。
137            //                                                          0           1           2       3       4       5
138            string[] funInfo = dal.ExecuteStringsBySingleRow("select ParentID, ParentIDPath, NoteLevel, Sort, WebURL, Target FROM Manage_Function WHERE (FunctionID = "+this.DataID +")");
139            if (funInfo != null)
140            {
141                //兄弟节点,下列信息一致
142                //设置父节点
143                SetFormControlValue(myForm, "1000020", funInfo[0]);//查找父节点
144                
145                //设置父节点路径
146                SetFormControlValue(myForm, "1000032",funInfo[1] );//查找父节点路径
147              
148                //设置级数
149                SetFormControlValue(myForm, "1000060",funInfo[2]);//查找级数
150               
151                //设置网址
152                SetFormControlValue(myForm, "1000100",funInfo[4]);//查找网址
153               
154                //设置目标
155                SetFormControlValue(myForm, "1000110",funInfo[5]);//查找目标
156
157                设置序号,兄弟节点的情况#region 设置序号,兄弟节点的情况
158                //获取指定节点的下一个节点的序号。如果有下一个节点,则直接设置,等真正保存的时候在修改后面的序号。
159                //如果没有则用指定节点的序号 + 100 。
160
161                //获取指定节点的下一个兄弟节点的序号
162                string sql = "select top 1 Sort from Manage_Function where ParentID = " + funInfo[0] + " and Sort > " + funInfo[3] + " order by sort";
163                string sort = dal.ExecuteString(sql);
164                if (sort != null)
165                {
166                    //指定的节点有下一个兄弟节点,设置序号
167                    SetFormControlValue(myForm, "1000090", sort);
168                }
169                else
170                {
171                    //指定的节点有没有下一个兄弟节点,判断是否是一级节点,是的话,指定节点的序号 + 10000。
172                    if (funInfo[0] == "0")
173                    {
174                        //一级节点
175                        sort = (Int32.Parse(funInfo[3]) + 100000).ToString();
176
177                        //设置序号
178                        SetFormControlValue(myForm, "1000090", sort);
179                    }
180                    else
181                    {
182                        //非一级节点,寻找指定节点的子节点的最大的序号
183                        sql = "select top 1 sort from Manage_Function where ParentIDPath + ',' like '" + funInfo[1] + ",%' order by sort desc ";
184                        sort = dal.ExecuteString(sql);
185                        if (sort != null)
186                            sort = (Int32.Parse(sort) + 100).ToString();
187                        
188                        //设置序号
189                        SetFormControlValue(myForm, "1000090", sort);
190                    }
191                    
192                }
193                #endregion
194
195            }
196            #endregion
197
198            设置添加人等#region 设置添加人等
199            SetFormControlValue(myForm, "1000130", MyUser.PersonID);//添加人
200            SetFormControlValue(myForm, "1000150", MyUser.PersonID);//修改人
201            SetFormControlValue(myForm, "1000120", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//添加日期
202            SetFormControlValue(myForm, "1000140", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//修改日期
203            
204            #endregion
205
206        }
207
208        #endregion
209
210        //一会移动到表单控件里面
211        protected void SetFormControlValue(MyForm form,string columnID,string value)
212        {
213            WebControl webControl;
214
215            webControl = (WebControl)form.FindControl("c_" + columnID);   //查找功能节点ID
216            ((IControlMgr)webControl).ControlValue = value;
217
218        }
219    }
220}

这里的代码就复杂了一些,但是也是围绕表单控件来做的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 大数据在服务器运营中的应用

    前言 腾讯公司从2012年开始,通过对服务器运营流程、工具系统的建设,服务器从一线到三线的运营基本转入线上自动化。在服务器静态配置、动态的运行状态和生命周期各个...

    鹅厂网事
  • 再谈领域事件

    我以前写过一篇关于领域事件的文章——《实现领域事件》,随着在项目中深入的使用DDD架构,我对领域事件有了新的认识。尤其是采用领域事件来解耦代码这种方式对项目的发...

    程序猿DD
  • 三大架构的比较

    MVC 模型层(Model) 负责存储、检索、操纵来自数据库或者网络的数据 视图层(View) 用户界面,一般采用XML文件进行界面的描述 控制层(Contro...

    我就是马云飞
  • IDC网络优化项目管理浅谈

    "鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网...

    鹅厂网事
  • 桥接模式(Bridge)

    桥接模式(Bridge) 桥接模式(Bridge)[Handle/Body] 意图:将抽象部分与它的实现部分分离,使他们都可以独立的变化。 应用:不同系统平台的...

    Florian
  • Airbnb定价算法揭密

    你应该收多少钱才会让一个人住在你家里?或者说,你愿意花多少钱住在别人的房子里?对于计划好的假期和突然决定的行程,你是否愿意或多或少地花点钱?

    人工智能资讯小编
  • 腾讯网络资深专家推荐开年好文:腾讯云VPC网络架构演进的经验教训

    "鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网...

    鹅厂网事
  • 浅谈服务器海量运营

    "鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网...

    鹅厂网事
  • 在苦难中的成长--从某宝某程故障看互联网业务系统可用性

    "鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网...

    鹅厂网事
  • 一行Spark代码的诞生记(深度剖析Spark架构)

    大家好,我是一行Spark代码,我叫小小小蕉,不知道为毛,我爸爸大蕉和我妈妈大大蕉把我生的又瘦又长。长这样。 val sssjiao = new SparkCo...

    大蕉

扫码关注云+社区

领取腾讯云代金券