SlickGrid 插件开发(3):Dropdownlist 下拉框控件开发
来源:互联网 发布:网络主播唱歌是真的吗 编辑:程序博客网 时间:2024/05/23 12:17
前言:用户在Grid里面的操作是一种富客户端的应用,下拉框编辑功能必不可少,目前已经整理出单元格嵌入方式的下拉框,只读下拉框列和可编辑的下拉框插件。在此把大致的开发过程总以总结说明,以飨读者。
1. DropdownList Editor -- 嵌入单元格
1). 绑定外部数据源和Changed事件
var dataSouce = args.grid.$selDropdownlistDatasource; var changedEvent = args.grid.$selDropdownlistChangedEvent;
2). 初始化方法
$select = this.preRender(args.grid.$selDropdownlistDatasource);if (changedEvent != null) $select.change(function () { changedEvent(this, { "ID": $select.val(), "txt": $select.find('option:selected').text() }); });$select.appendTo(args.container);预添加控件:
this.preRender = function (dataSource) { var option_str = ""; var preSelect = "<SELECT tabIndex='0' class='editor-select'><OPTION value='-1'></OPTION>"; var endSelect = "</SELECT>"; var len = dataSource.length; if (len > 0 && dataSource[0].txt != undefined) { for (var i = 0; i < len; i++) option_str += "<OPTION value='" + dataSource[i].ID + "'>" + dataSource[i].txt + "</OPTION>"; } else { for (var i = 0; i < len; i++) option_str += "<OPTION value='" + dataSource[i].ID + "'>" + dataSource[i].Text + "</OPTION>"; } var list = preSelect + option_str + endSelect; return $(list);}
3). 序列化方法
this.serializeValue = function () { if ($select.val() != -1) { return $select.find('option:selected').text(); }};
4). 插件完整代码
function DropDownList(args) { var $select = $(""); var defaultValue = ""; var scope = this; var dataSouce = args.grid.$selDropdownlistDatasource; var changedEvent = args.grid.$selDropdownlistChangedEvent; this.init = function () { if (dataSouce != undefined && dataSouce != null) { $select = this.preRender(args.grid.$selDropdownlistDatasource); if (changedEvent != null) $select.change(function () { changedEvent(this, { "ID": $select.val(), "txt": $select.find('option:selected').text() }); }); $select.appendTo(args.container); $select.focus(); } }; this.preRender = function (dataSource) { var option_str = ""; var preSelect = "<SELECT tabIndex='0' class='editor-select'><OPTION value='-1'></OPTION>"; var endSelect = "</SELECT>"; var len = dataSource.length; if (len > 0 && dataSource[0].txt != undefined) { for (var i = 0; i < len; i++) option_str += "<OPTION value='" + dataSource[i].ID + "'>" + dataSource[i].txt + "</OPTION>"; } else { for (var i = 0; i < len; i++) option_str += "<OPTION value='" + dataSource[i].ID + "'>" + dataSource[i].Text + "</OPTION>"; } var list = preSelect + option_str + endSelect; return $(list); } this.destroy = function () { $(args.container).empty(); }; this.focus = function () { $select.focus(); }; this.serializeValue = function () { if ($select.val() != -1) { return $select.find('option:selected').text(); } }; this.applyValue = function (item, state) { if (state != undefined) { item[args.column.field] = state; } }; this.loadValue = function (item) { defaultValue = item[args.column.field]; }; this.isValueChanged = function () { return ($select.val() != defaultValue); }; this.validate = function () { return { valid: true, msg: null }; }; this.init(); return $select.val(); }
a). 首先列定义如下:
{ id: "MadeInFrom", name: "产地", field: "MadeInFrom", fieldType: "int", hasFilter: true, editor: Slick.Editors.DropDownList },
b). 绑定数据源和Change事件示例:
//添加行绑定下拉框数据源var madeInType = [{ "ID": 1, "txt": "China" }, { "ID": 2, "txt": "USA" }, { "ID": 3, "txt": "Taiwan" }, { "ID": 4, "txt": "UK" }];
function onSelectChanged(e, args) { window.console.log("fire event...");}gridProduct.$selDropdownlistDatasource = madeInType;gridProduct.$selDropdownlistChangedEvent = onSelectChanged;
c). 页面效果
1). 定义命名空间
$.extend(true, window, { "Slick": { "CheckboxSelectColumn": CheckboxSelectColumn, "DropDownListColumn": DropDownListColumn } });
2). 插件完整代码
//#region 下拉框列function DropDownListColumn(options) { var _grid; var _self = this; var _handler = new Slick.EventHandler(); var _selectedRowsLoop = {}; var _default = { columnId: options.id, width: 60 }; var _options = $.extend(true, {}, _default, options); function init(grid) { _grid = grid; } function destroy() { _handler.unsubscribeAll(); } function getColumnDefinition() { return { id: _options.columnId, name: _options.name, field: _options.field, fieldType: _options.fieldType, hasFilter: _options.hasFilter, dataSource: _options.dataSource, width: _options.width, resizable: false, sortable: false, formatter: dropdownlistFormatter }; } function dropdownlistFormatter(row, cell, value, columnDef, dataContext) { if (dataContext) { var dataSource = _options.dataSource; var option_str = ""; var preSelect = "<SELECT tabIndex='0' id='slt_" + columnDef.field + "' class='editor-select'><OPTION value='-1'></OPTION>"; var endSelect = "</SELECT>"; for (var i = 0, len = dataSource.length; i < len; i++) { if (dataContext[columnDef.field] == dataSource[i].ID) { option_str += "<OPTION value='" + dataSource[i].ID + "' selected='true'>" + dataSource[i].Text + "</OPTION>"; } else { option_str += "<OPTION value='" + dataSource[i].ID + "'>" + dataSource[i].Text + "</OPTION>"; } } var list = preSelect + option_str + endSelect; return list; } } $.extend(this, { "init": init, "destroy": destroy, "getColumnDefinition": getColumnDefinition });}
3). 前端调用示例
a). 定义数据源
//添加整列固定下拉框数据源var productTypeJson = [{ "ID": 3, "Text": "PT-Three" }, { "ID": 4, "Text": "PT-Four" }, { "ID": 5, "Text": "PT-Five" }, { "ID": 6, "Text": "PT-Six" }];
b). 下拉框列定义
var dropdownProductType = new Slick.DropDownListColumn({ id: "ProductType", name: "产品类型", field: "ProductType", fieldType: "dropdownlist", hasFilter: true, width: 120, dataSource: productTypeJson});columnsProduct.splice(3, 0, dropdownProductType.getColumnDefinition());
b). 注册下拉框
//注册下拉框gridProduct.registerPlugin(dropdownProductType);
c). 页面效果
3. 总结:
插件开发是扩充SlickGrid功能的一种方式,主要步骤可以描述为:数据结构定义,初始化控件,控件事件交互和编辑框数值读取处理。此处做以Demo示例,供大家参考。
- SlickGrid 插件开发(3):Dropdownlist 下拉框控件开发
- SlickGrid 插件开发(1):插件功能总结
- SlickGrid 插件开发(1):插件功能总结 转载
- SlickGrid 插件开发(2):单元格合并功能实现
- SlickGrid 插件开发(4) :页脚合计功能实现
- SlickGrid 插件开发(2):单元格合并功能实现
- dropdownlist textbox 结合,下拉框和文本框结合的控件
- slickgrid表格控件
- Web表格控件 SlickGrid
- .net DropDownList下拉框
- 插件开发中的定制单选下拉框
- dropdownList与TextBox结合(.Net控件开发学习第一步)
- .net WinForm用户控件开发--(3)可多选的下拉列表框
- Android快速开发控件---下拉导航菜单
- SlickGrid的web表格控件
- select2插件与knockoutjs插件配合使用进行微信select下拉框开发
- Flex DropdownList下拉框宽度
- yii select下拉框dropdownlist
- .net 下新版highcharts本地导出图片bug处理
- 单例模式实例
- for惠普2013实习生
- IPhone程序发布到应用程序商店的流程
- 使用Bezier Paths
- SlickGrid 插件开发(3):Dropdownlist 下拉框控件开发
- HDU2150 Pipe
- iOS 竖向tableView上添加横向tableView
- PHP imagick-3.1.0RC2无法安装,提示fatal error: wand/MagickWand.h: No such file or directory 解决方法
- jquery flexgrid使用部分说明
- iOS 通讯录问题
- Apache 设置多个虚拟主机使用一个 IP 地址
- 乐观锁与悲观锁
- 【Android UI设计与开发】第01期:引导界面(一)ViewPager介绍和使用详解