`
softall
  • 浏览: 20147 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

SlickGrid 插件开发(3):Dropdownlist 下拉框控件开发

 
阅读更多
前言:用户在Grid里面的操作是一种富客户端的应用,下拉框编辑功能必不可少,目前已经整理出单元格嵌入方式的下拉框,只读下拉框列和可编辑的下拉框插件。在此把大致的开发过程总以总结说明,以飨读者。



1. DropdownList Editor -- 嵌入单元格

1). 绑定外部数据源和Changed事件

[javascript] view plaincopy
var dataSouce = args.grid.$selDropdownlistDatasource; 
var changedEvent = args.grid.$selDropdownlistChangedEvent; 

2). 初始化方法
[javascript] view plaincopy
$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); 
预添加控件:
[javascript] view plaincopy
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). 序列化方法

[javascript] view plaincopy
this.serializeValue = function () { 
    if ($select.val() != -1) { 
        return $select.find('option:selected').text(); 
    } 
}; 


4). 插件完整代码


[javascript] view plaincopy
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(); 
    } 

5). 前端调用示例
a). 首先列定义如下:

[javascript] view plaincopy
{ id: "MadeInFrom", name: "产地", field: "MadeInFrom", fieldType: "int", hasFilter: true, editor: Slick.Editors.DropDownList }, 

b). 绑定数据源和Change事件示例:
[javascript] view plaincopy
//添加行绑定下拉框数据源 
var madeInType = [{ "ID": 1, "txt": "China" }, 
    { "ID": 2, "txt": "USA" }, 
    { "ID": 3, "txt": "Taiwan" }, 
    { "ID": 4, "txt": "UK" }]; 

[javascript] view plaincopy
function onSelectChanged(e, args) { 
    window.console.log("fire event..."); 

 
gridProduct.$selDropdownlistDatasource = madeInType; 
gridProduct.$selDropdownlistChangedEvent = onSelectChanged; 

c). 页面效果



2. DropdownList  Column --下拉框列
1). 定义命名空间

[javascript] view plaincopy
$.extend(true, window, { 
      "Slick": { 
          "CheckboxSelectColumn": CheckboxSelectColumn, 
          "DropDownListColumn": DropDownListColumn 
      } 
  }); 

2). 插件完整代码


[javascript] view plaincopy
//#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). 定义数据源


[javascript] view plaincopy
//添加整列固定下拉框数据源 
var productTypeJson = [{ "ID": 3, "Text": "PT-Three" }, 
    { "ID": 4, "Text": "PT-Four" }, 
    { "ID": 5, "Text": "PT-Five" }, 
    { "ID": 6, "Text": "PT-Six" }]; 


b). 下拉框列定义

[javascript] view plaincopy
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). 注册下拉框
[javascript] view plaincopy
//注册下拉框 
gridProduct.registerPlugin(dropdownProductType); 

c). 页面效果


3. 总结:

插件开发是扩充SlickGrid功能的一种方式,主要步骤可以描述为:数据结构定义,初始化控件,控件事件交互和编辑框数值读取处理。此处做以Demo示例,供大家参考。
分享到:
评论

相关推荐

    dropdownlist下拉框实现多选

    在网页设计和开发中,`dropdownlist`,也就是下拉选择框,是常见的用户界面元素。通常情况下,下拉框只允许用户选择一个选项。然而,对于需要用户选择多个值的场景,我们可以实现多选功能的`dropdownlist`。本文将...

    asp.net Dropdownlist结合CheckBoxList多选下拉框

    在ASP.NET开发中,Dropdownlist控件通常用于创建单选下拉列表,而CheckBoxList控件则用于展示可多选的列表项。然而,有时我们需要一个具有多选功能的下拉框,这时可以将Dropdownlist与CheckBoxList结合起来实现这一...

    可输入的下拉框 控件

    在ASP.NET开发中,我们经常需要使用到各种控件来构建用户界面,其中DropdownList(下拉列表)是一个常见的选择控件。然而,标准的DropdownList控件通常只能让用户从预定义的选项中选择,而不能直接输入新的值。为了...

    基于ASP.NET实现的可编辑的下拉框控件程序例子

    ASP.NET作为一种流行的Web应用程序框架,提供了丰富的服务器控件,其中可编辑的下拉框(DropDownList)控件是一个常用且功能强大的组件。本文将深入探讨如何在ASP.NET中实现一个可编辑的下拉框控件,并通过具体的...

    .NET DropDownList下拉框 无限级分类

    在.NET框架中,DropDownList控件是Web开发中常用的一种组件,它用于呈现一组可选的选项供用户选择。在实际应用中,我们经常需要构建具有无限级分类的下拉框,例如在创建一个新闻分类系统时,可能需要将新闻类别按照...

    C#編程asp:DropDownList綁定數據層

    在C#编程中,ASP.NET框架提供了一个强大的控件集,其中包括`asp:DropDownList`,它是一个下拉列表控件,广泛用于网页中的数据选择和输入。在B/S(Browser/Server)架构中,`asp:DropDownList`通常与数据库进行交互,...

    ASP下拉框多选控件及使用方法

    在ASP中,处理用户输入并展示数据时,下拉框(Dropdown List)是一种常见的控件,尤其在需要用户从预定义选项中选择一个或多个值时。本文将详细介绍ASP下拉框多选控件的实现方法,以及如何在实际项目中应用。 在...

    ASP.NET中DropDownList下拉框列表控件绑定数据的4种方法

    this.DropDownList3.DataTextField = "value"; this.DropDownList3.DataBind(); ``` 这种方式适合当选项需要有独立的标识(key)和显示名称(value)时。 4. **对象集合绑定**: 当需要更复杂的数据结构时,...

    NET+DropDownList下拉框+无限级分类

    在.NET开发中,DropDownList控件是经常用于创建选择列表的UI元素,它在Web应用程序中扮演着重要的角色。在ASP.NET中,我们经常会遇到需要处理无限级分类的情况,例如在构建多层级的导航菜单、组织结构或者产品分类时...

    Dropdownlist 只读不可选择的方法实例

    在.NET开发中,DropdownList控件是经常用于创建下拉选择列表的常用组件。这个实例主要探讨如何将DropdownList设置为只读模式,即用户不能从列表中进行选择,但仍然可以显示预设的值。下面我们将详细讲解实现这一功能...

    DropDownList下拉框多选

    在网页设计和开发中,`DropDownList`通常指的是HTML中的`&lt;select&gt;`元素,它用于创建下拉列表。然而,标准的`&lt;select&gt;`元素仅支持单选,即用户只能选择一个选项。为了实现"多选"功能,我们需要借助一些额外的技术或库...

    DropDownList模糊查询

    在网页开发中,"DropDownList模糊查询"是一个常见的交互功能,它使得用户在下拉框中输入部分文本时,能够快速找到并选择匹配项。这种功能大大提升了用户体验,特别是当下拉列表包含大量选项时。在本场景中,我们使用...

    对绑定的下拉列表Dropdownlist,可以进行搜索

    Dropdownlist,又称为下拉菜单或选择框,是一种常见的表单控件,用于让用户在一组预设选项中做出选择。当选项数量过多时,查找特定项变得困难,此时集成搜索功能就显得尤为必要。 **Dropdownlist搜索功能的工作原理...

    ASP.NET多选下拉框自定义控件

    在ASP.NET开发中,我们经常需要处理用户交互,如选择多个选项的情况,此时,传统的单选下拉框(DropDownList)往往无法满足需求。本文将深入探讨如何创建一个自定义的多选下拉框控件,以提升用户体验,并利用Ajax...

    ASP.NET下拉框可勾选

    在ASP.NET中,下拉框(DropDownList)是一种常见的用户界面元素,用于提供一组预设选项供用户选择。然而,标准的DropDownList控件仅支持单选,即用户只能选择一个选项。但在某些应用场景中,可能需要用户能够多选,...

    DropDownList 下拉框选择改变促发事件和防全局刷新(推荐)

    在ASP.NET开发中,`DropDownList`控件是常见的用户界面元素,用于提供一组选项供用户选择。当用户从下拉列表中选择一个新的项时,我们通常需要响应这个选择变化并执行相应的操作,如更新页面的其他部分或者从服务器...

    Dropdownlist控件的使用

    在ASP.NET开发中,Dropdownlist控件是一种常用的交互元素,用于提供用户选择一个或多个预定义选项的功能。在本教程中,我们将深入探讨如何使用Dropdownlist控件,并实现标题和描述中提到的联动效果——当用户在一个...

Global site tag (gtag.js) - Google Analytics