动态静态网页EasyUI DataGrid 动态新增 Toolbar

本文介绍了如何在EasyUI的DataGrid中动态新增Toolbar按钮,强调了JavaScript应用中商业逻辑应放在服务器端,以降低耦合性和提高可维护性。通过静态网页的实践和ASP.NET结合的例子,展示了动态生成button的方法,帮助开发者理解和实现EasyUI的动态操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!

    easyui datagrid 是一个弹性蛮大的元件,但是官方文件有点不足,是比拟惋惜的一点。上面,一条小龙会介绍一下,如何动态新增 toolbar button。这个技巧读者可以融会贯通应用在任何想动态新增的部分上。这边尽量简化好来介绍其中的关键点。

    一般写 JavaScript 应用的程式,实务上一条小龙 自己开发时都会希望能尽量把商业逻辑放在server 端来控制,client 端就是酿成单纯的控件应用。这样的好处是后面比拟好维护,因为后面在维护时,只要专注于 server 端的逻辑的变更就好,而不用 Client Server 双方比拟来得悉要如何改。

    
另一个好处是,让后续开发人员只要专注Server 端的开发技巧便可,而不必为了增加一个 button 这类常用到的功能,也要后端开发人员去懂得 EasyUI 后才有办法去开发,如此一来就可以减少很多开发本钱。

    一般程式开发中,大家都晓得要下降程式间的耦合性,也就是要下降程式间的关联性,尽量让各程式独立来发展,这个情理应用在这,就可以懂得Client Server 端切割清楚,也会有助于,后续程式的稳定性。

    上面,来介绍一下 EasyUI 的基本观点,也就是 EasyUI 的元件一定要先初始化,才能应用,而一但初始化,想再去改变它,就只能透过 EasyUI 元件所提供的 Function 来操纵,一但没有对应 Function 可以操纵,就只能想办法在一开始初始化中 就要定义好,以上是我们在操纵 EasyUI 的主要观念。

    要动态化操纵前,首先要先晓得如何用 静态网页来操纵,没问题后,再来想办法用 后端程式 来发生相对应的 JS,以下就是静态网页的操纵方式。

动态和静态网页 动态和静态网页
 1     $(function () {
 2         AddButton("btnAlert", "alert test", "icon-edit");
 3         var config = {};
 4         config.toolbar = toolbar;
 5         $('#dg').datagrid(config);
 6         loaddata();
 7     });
 8     var toolbar = [];
 9     function AddButton(btnID, caption, icon) {
10         if (toolbar.length > 0) {
11             toolbar[toolbar.length] = "-";
12         }
13         toolbar[toolbar.length] = {
14             text: caption,
15             iconCls: icon
16         };
17     }
18 
19     function loaddata() {
20         var rawData = { "total": 28, "rows": [
21             { "productid": "FI-SW-01", "unitcost": 10.00, "status": "P", "listprice": 36.50, "attr1": "Large", "itemid": "EST-1" },
22             { "productid": "K9-DL-01", "unitcost": 12.00, "status": "P", "listprice": 18.50, "attr1": "Spotted Adult Female", "itemid": "EST-10" },
23             { "productid": "RP-SN-01", "unitcost": 12.00, "status": "P", "listprice": 28.50, "attr1": "Venomless", "itemid": "EST-11" },
24             { "productid": "RP-SN-01", "unitcost": 12.00, "status": "P", "listprice": 26.50, "attr1": "Rattleless", "itemid": "EST-12" },
25             { "productid": "RP-LI-02", "unitcost": 12.00, "status": "P", "listprice": 35.50, "attr1": "Green Adult", "itemid": "EST-13" },
26             { "productid": "FL-DSH-01", "unitcost": 12.00, "status": "P", "listprice": 158.50, "attr1": "Tailless", "itemid": "EST-14" },
27             { "productid": "FL-DSH-01", "unitcost": 12.00, "status": "P", "listprice": 83.50, "attr1": "With tail", "itemid": "EST-15" },
28             { "productid": "FL-DLH-02", "unitcost": 12.00, "status": "P", "listprice": 63.50, "attr1": "Adult Female", "itemid": "EST-16" },
29             { "productid": "FL-DLH-02", "unitcost": 12.00, "status": "P", "listprice": 89.50, "attr1": "Adult Male", "itemid": "EST-17" },
30             { "productid": "AV-CB-01", "unitcost": 92.00, "status": "P", "listprice": 63.50, "attr1": "Adult Male", "itemid": "EST-18" }
31         ]
32         };
33         $('#dg').datagrid('loadData', rawData);
34     }
35 
36     <table id="dg" style="width:700px;height:auto"
37             title="DataGrid" iconCls="icon-edit" singleSelect="true">
38         <thead>
39             <tr>
40                 <th field="itemid" width="80">Item ID</th>
41                 <th field="productid" width="100">Product</th>
42                 <th field="listprice" width="80" align="right" editor="{type:'numberbox',options:{precision:1}}">List Price</th>
43                 <th field="unitcost" width="80" align="right" editor="numberbox">Unit Cost</th>
44                 <th field="attr1" width="250" editor="text">Attribute</th>
45                 <th field="status" width="60" align="center" editor="{type:'checkbox',options:{on:'P',off:''}}">Status</th>
46             </tr>
47         </thead>
48     </table>
View Code
 

    上述静态网页,这就是一条小龙为了做动态发生 button,做的一个观点网页,先把你可以想像的操纵用静态网页来实验,实验胜利在用后端来发生。该静态网页,主要的点就在于 AddButton 这个 Function ,如此实验便可得悉,后面用后端程式只要发生呼叫 AddButton 这个 function 就可以动态发生 button 了。

    所以读者懂得上述程式,就可以 接着来看上面与 ASP.NET 结合后的一个观点程式

    每日一情理
聪明人学习,像搏击长空的雄鹰,仰视一望无际的大地;愚笨的人学习,漫无目的,犹如乱飞乱撞的无头飞蛾;刻苦的人学习,像弯弯的河流,虽有曲折,但终会流入大海;懒惰的人学习,像水中的木头,阻力越大倒退得越快。
动态和静态网页 动态和静态网页
 1 <%@ Page Language="C#" AutoEventWireup="True" %>
 2 
 3 <script language="C#" runat=server>
 4     public void Page_Init(object sender, System.EventArgs e)
 5     {
 6         string CusButton = "AddButton('btnAlert', 'alert test', 'icon-edit');";
 7         char vbCrLf = '\n';
 8         string s = @"/";
 9         Response.Write("<script type='text/javascript'>");
10         Response.Write("function onBeforeInit() {" + CusButton + "}");
11         Response.Write("<" + s + "script>" + vbCrLf);
12     }
13 </script>
14 <html>
15 <head>
16     <meta http-equiv="content-type" content="text/html; charset=utf-8" />
17 </head>
18     <link rel="stylesheet" type="text/css" href="./JS/EasyUI/themes/default/easyui.css">
19     <link rel="stylesheet" type="text/css" href="./JS/EasyUI/themes/icon.css">
20 
21     <script type="text/javascript" src="./JS/jquery18min.js"></script>
22     <script type="text/javascript" src="./JS/EasyUI/jquery.easyui.min.js"></script>
23     <script type="text/javascript" src="./JS/EasyUI/easyui-lang-zh_TW.js"></script>
24 
25     <script type="text/javascript" src="./JS/dhtmlx/dhtmlxcommon.js"></script>
26     <script type="text/javascript" src="./JS/fg.menu.js"></script>
27 
28     <link type="text/css" href="./css/fg.menu.css" media="screen" rel="stylesheet" />
29     <link type="text/css" href="./css/theme/ui.all.css" media="screen" rel="stylesheet" />
30 
31 <script type="text/javascript">
32     $(function () {
33         if (typeof (onBeforeInit) == 'function') {
34             onBeforeInit();
35         }
36         var config = {};
37         config.toolbar = toolbar;
38         $('#dg').datagrid(config);
39         loaddata();
40     });
41     var toolbar = [];
42     function AddButton(btnID, caption, icon) {
43         if (toolbar.length > 0) {
44             toolbar[toolbar.length] = "-";
45         }
46         toolbar[toolbar.length] = {
47             text: caption,
48             iconCls: icon
49         };
50     }
51 
52     function loaddata() {
53         var rawData = { "total": 28, "rows": [
54             { "productid": "FI-SW-01", "unitcost": 10.00, "status": "P", "listprice": 36.50, "attr1": "Large", "itemid": "EST-1" },
55             { "productid": "K9-DL-01", "unitcost": 12.00, "status": "P", "listprice": 18.50, "attr1": "Spotted Adult Female", "itemid": "EST-10" },
56             { "productid": "RP-SN-01", "unitcost": 12.00, "status": "P", "listprice": 28.50, "attr1": "Venomless", "itemid": "EST-11" },
57             { "productid": "RP-SN-01", "unitcost": 12.00, "status": "P", "listprice": 26.50, "attr1": "Rattleless", "itemid": "EST-12" },
58             { "productid": "RP-LI-02", "unitcost": 12.00, "status": "P", "listprice": 35.50, "attr1": "Green Adult", "itemid": "EST-13" },
59             { "productid": "FL-DSH-01", "unitcost": 12.00, "status": "P", "listprice": 158.50, "attr1": "Tailless", "itemid": "EST-14" },
60             { "productid": "FL-DSH-01", "unitcost": 12.00, "status": "P", "listprice": 83.50, "attr1": "With tail", "itemid": "EST-15" },
61             { "productid": "FL-DLH-02", "unitcost": 12.00, "status": "P", "listprice": 63.50, "attr1": "Adult Female", "itemid": "EST-16" },
62             { "productid": "FL-DLH-02", "unitcost": 12.00, "status": "P", "listprice": 89.50, "attr1": "Adult Male", "itemid": "EST-17" },
63             { "productid": "AV-CB-01", "unitcost": 92.00, "status": "P", "listprice": 63.50, "attr1": "Adult Male", "itemid": "EST-18" }
64         ]
65         };
66         $('#dg').datagrid('loadData', rawData);
67     }
68 </script>
69 <body>
70    <form id="Form1" runat="server">
71  
72         <table id="dg" style="width:700px;height:auto"
73                 title="DataGrid" iconCls="icon-edit" singleSelect="true">
74             <thead>
75                 <tr>
76                     <th field="itemid" width="80">Item ID</th>
77                     <th field="productid" width="100">Product</th>
78                     <th field="listprice" width="80" align="right" editor="{type:'numberbox',options:{precision:1}}">List Price</th>
79                     <th field="unitcost" width="80" align="right" editor="numberbox">Unit Cost</th>
80                     <th field="attr1" width="250" editor="text">Attribute</th>
81                     <th field="status" width="60" align="center" editor="{type:'checkbox',options:{on:'P',off:''}}">Status</th>
82                 </tr>
83             </thead>
84         </table>
85    </form>
86 </body>
87 </html>
View Code
 

    这个程式主要应用了上一篇 如何用 javascript 动态呼叫函数 的技巧,在 DataGrid init 前往呼叫 onBeforeInit 这个 function,这个就是一条小龙在前端框架中,为后端程式预留弹性的空间,当然后续读者在应用时,可以将这些init 分得更细,让后端程式有更明确的方式来呼叫。一条小龙在这边只是介绍其中的观点,所以会比拟大略一点。

文章结束给大家分享下程序员的一些笑话语录: 程序语言综述
CLIPPER 程序员不去真的猎捕大象,他们只是购买大象部分的库然后花几年的时间试图综合它们。
DBASE 程序员只在夜间猎捕大象,因为那时没人会注意到他们还在使用石弓。
FOXPRO 程序员开始使用更新更好的步枪,这使他们花掉比实际狩猎更多的时间学习新的射击技术。
C 程序员拒绝直接购买步枪,宁可带着钢管和一个移动式机器车间到非洲,意欲从零开始造一枝完美的步枪。
PARADOX 程序员去非洲时带着好莱坞关于猎捕大象的电影剧本,他们认为照剧本行事就会逮到一头大象。
ACCESS 程序员在没有任何猎象经验的经验下就出发了,他们穿着华丽的猎装、带着全部装备,用漂亮的望远镜找到了大象,然后发觉忘了带扳机。
RBASE 程序员比大象还要稀少,事实上,如果一头大象看到了一个RBASE程序员,对他是个幸运日。
VISUAL ACCESS 程序员装上子弹、举起步枪、瞄准大象,这使大象感到可笑,究竟谁逃跑。他们无法抓住大象,因为由于他们对多重控制的偏爱,他们的吉普车有太多的方向盘因而无法驾驶。
ADA、APL和FORTRAN 程序员与圣诞老人和仙女一样是虚构的。
COBOL 程序员对和自己一样濒临灭绝的大象寄予了深切的同情。


名称 类型 描述 默认值 columns(列) array(数组) 数据表格列配置对象,查看列属性以获取更多细节。 null frozenColumns(固定列) array(数组) 跟列属性一样,但是这些列固定在左边,不会滚动。 null fitColumns(自适应列宽) boolean(布尔型) 设置为true将自动使列适应表格宽度以防止出现水平滚动。 false striped(显示条纹) boolean(布尔型) 设置为true将交替显示行背景。 false method(方法) string(字符串) 请求远程数据的方法类型。 post nowrap(截取) boolean(布尔型) 设置为true,当数据长度超出列宽时将会自动截取。 true idField(id字段) string(字符串) 表明该列是一个唯一列。 null url(超链接) string(字符串) 一个用以从远程站点请求数据的超链接地址。 null loadMsg(载入时信息) string(字符串) 当从远程站点载入数据时,显示的一条快捷信息。 Processing, please wait … pagination(分页) boolean(布尔型) 设置true将在数据表格底部显示分页工具栏。 false rownumbers(行数) boolean(布尔型) 设置为true将显示行数。 false singleSelect(单选模式) boolean(布尔型) 设置为true将只允许选择一行。 false pageNumber(当前页码) number(数字) 当设置分页属性时,初始化分页码。 1 pageSize(每页记录数) number(数字) 当设置分页属性时,初始化每页记录数。 10 pageList(可选择的每页记录数) array 当设置分页属性时,初始化每页记录数列表。 [10,20,30,40,50] queryParams(查询参数) object(对象) 当请求远程数据时,发送的额外参数。 {} sortName(默认排序) string(字符串) 当数据表格初始化时以哪一列来排序。 null sortOrder(排序顺序) string(字符串) 定义排序顺序,可以是'asc'或者'desc'(正序或者倒序)。 asc remoteSort(远程排序) boolean(布尔型) 定义是否通过远程服务器对数据排序。 true showFooter(显示行底) boolean(布尔型) 定义是否显示行底(如果是做统计表格,这里可以显示总计等)。 false rowStyler(行样式) function(函数) 返回样式,如:'background:red',function有2个参数: index:行索引,从0开始. row:对应于该行记录的对象。 loadFilter(载入过滤器) function(函数) 返回用以显示的已过滤数据,function有一个参数'data'表示原始数据,你可以将原始数据改变为规范的数据格式,该函数必须返回包含 'total'和'rows'属性的标准数据对象。 editors(编辑模式) object(对象) 定义当编辑一行时的编辑模式。 predefined editors view(视图) object(对象) 定义数据表格的视图。 default view
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值