在本节中我们在表格最前方增加一列,在列的单元格中增加一个重置密码按钮,未修改过密码的员工重置密码按钮状态为不可用。已经修改过密码的员工重置密码按钮可用,点击重置密码按钮后,将员工密码重置为123456。
步骤1:拷贝视图并修改名称
将 com.bstek.dorado.sample.standardlesson.middle.base目录下的 EmployeeManageForDropDown.view.xml拷贝到当前目录并重命名为 EmployeeManageForCustomRender.view.xml。
步骤2:修改DataType配置
由于在下一步中会在表格中增加临时操作列,而表格和DataType是存在关联关系的,因此我们需要在SlEmployee这个DataType中新增一个PropertyDef,设置PropertyDef属性如下:
属性 | 值 | 说明 |
---|---|---|
name | operation | 字段的名称 |
submittable | false | 该属性中的内容默认情况是否需要向服务端提交 |
由于operation为临时字段,因此此字段的值不需要服务端提交。
步骤3:修改DataGrid配置
鼠标选中【datagridEmployee】,设置其属性如下:
属性 | 值 | 说明 |
---|---|---|
dynaRowHeight | true | DataColumn支持动态行高 |
为其添加一个DataColumn,拖动新增的DataColumn到最上方,设置属性如下:
属性 | 值 | 说明 |
---|---|---|
name | operation | DataColumn的属性名 |
caption | 重置密码 | DataColumn的显示标题 |
align | center | DataColumn对齐方式 |
width | 75 | DataColumn的宽度 |
如下图所示:
步骤4:为DataGrid绑定事件
在列中渲染按钮,我们目前采用的是利用Grid自身提供的CellRenderer处理机制,定义自己的CellRenderer,并与相关的DataColumn绑定,这样DataColumn就会以你自定义的CellRenderer的渲染机制实现单元格内容的渲染(要求对DHTML有一定了解)
基本代码为:
var OperationCellRenderer = $extend(dorado.widget.grid.SubControlCellRenderer, { createSubControl: function(arg) { //创建单元格内部的DOM元素 }, refreshSubControl: function(button, arg) { //当渲染单元格时触发,在这个事件中可以通过arg.data获取当前的实体对象 } }); self.set("#operation.renderer", new OperationCellRenderer());//最后设置名称为operation的DataColumn的渲染器为自定义的OperationCellRenderer
接下来我们为【datagridEmployee】绑定onCreate事件,在事件编辑区中输入如下代码:
var OperationCellRenderer = $extend(dorado.widget.grid.SubControlCellRenderer, { createSubControl : function(arg) { if (arg.data.rowType) return null; //返回按钮对象并为按钮对象绑定onClick事件 return new dorado.widget.Button({ onClick : function(self) { //获取当前员工对象 var entity = arg.data; //在点击重置按钮后,将当前员工的密码设置为123456并保存 entity.set("password","123456"); view.get("#updateactionSave").execute(function(){ dorado.widget.NotifyTipManager.notify(entity .get("employeeName")+ "的密码已经重置!"); }) } }); }, refreshSubControl : function(button, arg) { var password = arg.data.get("password"); //设置按钮的标题,假如员工密码为默认值则按钮显示未修改密码,若员工密码已经修改则按钮显示重置密码 //如果员工密码为默认则按钮不可用 button.set({ caption : (password != "123456") ? "重置密码" : "未修改密码", disabled : (password == "123456") }); } }); self.set("#operation.renderer", new OperationCellRenderer());