在EasyUI的DataGrid中嵌入Combobox

在做项目时,需要在EasyUI的DataGrid中嵌入Combobox,花了好几天功夫,在大家的帮助下,终于看到了它的庐山真面:

核心代码如下:

<html>
<head>
    @*添加Jquery EasyUI的样式*@
    <link href="@Url.Content("../../Content/JqueryEasyUI/themes/default/easyui.css")" rel="stylesheet" />
    <link href="@Url.Content("../../Content/JqueryEasyUI/themes/icon.css")" rel="stylesheet" />

    @*添加Jquery,EasyUI和easyUI的语言包的JS文件*@
    <script src="@Url.Content("../../Content/JqueryEasyUI/jquery-1.8.0.min.js")"></script>
    <script src="@Url.Content("../../Content/JqueryEasyUI/jquery.easyui.min.js")"></script>
    <script src="@Url.Content("../../Content/JqueryEasyUI/locale/easyui-lang-zh_CN.js")"></script>

    @*实现对EasyUI的DataGird控件操作的JS代码*@
    <script type="text/javascript">

        $(function () {
            //当页面首次刷新的时候执行的事件
            initTable();
        });

        //实现新闻DataGird控件的绑定操作
        function initTable(queryData) {
            $('#test').datagrid({            //定位到Table标签,Table标签的ID是test
                fitColumns: true,
                url: '/News/QueryAllNews',   //指向后台的Action来获取当前用户的信息的Json格式的数据
                title: '新闻公告',           //表格标题
                striped: true,               //斑马线效果
                pagination: true,            //分页工具栏
                rownumbers: true,            //显示行号
                onClickCell: onClickCell,    //点击单元格触发的事件(重要)
                onAfterEdit:onAfterEdit,     //编辑单元格之后触发的事件(重要)
                idField: 'NewsID',           //标识字段
                queryParams: queryData,      //异步查询的参数
                columns: [[
	                  { field: 'ck', checkbox: true },
	                  { title: '主键', field: 'NewsID', sortable: true, hidden: true, },
                    <span style="white-space:pre">	</span>  { title: '内容标题', field: 'NewsTitle', width: 50, sortable: true },
                  <span style="white-space:pre">	</span>  { title: '具体内容', field: 'NewsContent', sortable: true, hidden: true, },
                  <span style="white-space:pre">	</span>  { title: '创建时间', field: 'TimeStamp', sortable: true, },
                  <span style="white-space:pre">	</span>  { title: '所属类别', field: 'CategoryName', sortable: true, },
                  <span style="white-space:pre">	</span>  { title: '创建人', field: 'UserName', sortable: true },
                   <span style="white-space:pre">	</span>  {
                            title: '是否在首页显示', field: 'IsShow', sortable: true,
                            editor: {
                                      type: 'combobox',
                                      options: {
                                                 valueField: 'text',
                                                 textField: 'text',
                                                 method: 'get',
                                                 url: '/News/ReturnIsShowData',
                                                 required: true
                                                }
                                     }
                          }
                        ]],
                toolbar: [{
                    id: 'btnadd',
                    text: '添加',
                    iconCls: 'icon-add',
                    handler: function () {
                        //实现弹出注册信息的页面
                        AddNews();
                    }
                }, '-', {
                    id: 'btncut',
                    text: '修改',
                    iconCls: 'icon-cut',
                    handler: function () {
                        //实现修改的方法
                        UpdateLzjs();
                    }
                }, '-', {
                    id: 'btnCancle',
                    text: '删除',
                    iconCls: 'icon-remove',
                    handler: function () {
                        //实现直接删除所有数据的方法
                        DeleteLzjs();
                    }
                }]
            });
        }

        $.extend($.fn.datagrid.methods, {
            editCell: function (jq, param) {
                return jq.each(function () {
                    var opts = $(this).datagrid('options');
                    var fields = $(this).datagrid('getColumnFields', true).concat($(this).datagrid('getColumnFields'));
                    for (var i = 0; i < fields.length; i++) {
                        var col = $(this).datagrid('getColumnOption', fields[i]);
                        col.editor1 = col.editor;
                        if (fields[i] != param.field) {
                            col.editor = null;
                        }
                    }
                    $(this).datagrid('beginEdit', param.index);
                    for (var i = 0; i < fields.length; i++) {
                        var col = $(this).datagrid('getColumnOption', fields[i]);
                        col.editor = col.editor1;
                    }
                });
            }
        });

        var editIndex = undefined;
	//判断是否编辑结束
        function endEditing() {
            if (editIndex == undefined) { return true }
            if ($('#test').datagrid('validateRow', editIndex)) {
                $('#test').datagrid('endEdit', editIndex);
                editIndex = undefined;
                return true;
            } else {
                return false;
            }
        }

	//点击单元格触发的事件
        function onClickCell(index, field) {
            if (endEditing()) {
                $('#test').datagrid('selectRow', index)
						.datagrid('editCell', { index: index, field: field });
                editIndex = index;
            }
        }

	//编辑完单元格之后触发的事件
        function onAfterEdit(index, row, changes) {

            //…执行编辑单元格后需要执行的操作…
	    //…执行编辑单元格后需要执行的操作…
        }
        }
    </script>
</head>
<body>
        <table id="test" style="width: 955px; margin: 20px 0 10px 8px" title="新闻中心" iconcls="icon-edit">
        </table>
</body>
</html>

在Combobox类型的editor的数据源url: ‘/News/ReturnIsEnabledData‘在相应Controller中对应的方法为(其实就是在后台拼了个特别简单的json串):

public string ReturnIsShowData()
        {
            string strJson = "[{\"id\":\"yes\",\"text\":\"是\"},{\"id\":\"no\",\"text\":\"否\"}]";
            return strJson;
        }

当选择了Combobox中的值时,只需要把将要执行的操作写在onAfterEdit(index, row, changes)函数中即可,index为编辑的行号,默认从0开始;row为被编辑单元格所在的整个行,row.列名可以获得此行此列的数据,如row.IsShow可以获得被编辑单元格所在行的IsShow列的数据。

(此文内容基于Asp.net MVC)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-30 20:30:40

在EasyUI的DataGrid中嵌入Combobox的相关文章

EasyUI 的DataGrid中DateTime的格式化问题

想必用过EasyUI的朋友们都应该会遇到这样的情况吧:(下图) 第一步:添加如下方法: function getTime(/** timestamp=0 **/) { var ts = arguments[0] || 0; var t, y, m, d, h, i, s; t = ts ? new Date(ts * 1000) : new Date(); y = t.getFullYear(); m = t.getMonth() + 1; d = t.getDate(); h = t.getH

easyUi 表格 datagrid 中字段超链接设置参数

datagrid中设置field链接   链接中通常传递的是int类型的ID字段,但是有时难免传递文本之类的参数 那可以添加 如下 : field: 'batchImg', title: '质检报告', width: 60,                        formatter: function (value, row, index) {                            //商品ID                                       

EasyUI获取DataGrid中某一列的所有值

有一需求为计算[成绩]列中所有数据之和 function count() { var rows = $('#dg'').datagrid('getRows')//获取当前页的数据行 var total = 0; for (var i = 0; i < rows.length; i++) { total += rows[i]['SCORE']; //获取指定列 } alert(total); } 作者:itmyhome 版权声明:本文为博主原创文章,未经博主允许不得转载.

Easyui的datagrid中的if判断问题

初学easyui,在columns里面有这么一列 { field : 'alert', title : '报警类型', width : 150, rowspan : 2, align : 'center' } 想判断当datagrid里面的值为"1"(String类型)的时候列表显示为A,值为"2"的时候显示B,这个该怎么写? 解答: { field : 'alert', title : '报警类型', width : 150, rowspan : 2, align

EasyUI 解决 datagrid 中 NumberBox 限制小数位数后不能输入小数点问题

初始化界面,发现编辑datagrid,不能输入小数点. var arrColumnsCNT = [[ { title: '毛重', field: 'GrossWeight', halign: 'center', width: 60, sortable: true, frozen: true, editor: { type: 'numberbox', options:{precision:2} } } ]]; function DefDataGridCNT() { objDataGridCNT =

jquery数字打分插件与嵌入到EasyUI datagrid中的示例

这阵儿是断续折腾定性考评表打分的事儿了.虽是UI菜鸟,但却一直想让用户在操作上更加方便,之前基于"jQuery星级评分插件"实现了一个评分界面(因为比较简单,就不做总结了),用户反应还不错. 这一次的评分表中,各项分值的特点有:一是每个评分项的分值均不太一样:二是分值为整数,但分值范围大,从-1000到+1000都存在.若是采用在datagrid中嵌入编辑框的形式实现的话,总是觉得让用户使用不太方便,所以内心非常想做一个数字插件,然后就搜到中意的例子--"简单的jQuery用

easyui datagrid中datetime字段的显示和增删改查问题

datagrid中datetime字段的异常显示: 使用过easyui datagrid的应该都知道,如果数据库中的字段是datetime类型,绑定在datagrid显式的时候会不正常显示,一般需要借助于formatter来格式化时间格式 { title: '活动开始时间', field: 'BeginTime', width: 300, editor: { type: 'datetimebox', options: { required: true }, formatter: function

EasyUI DataGrid 中字段 formatter 格式化不起作用

今天用 EasyUI datagrid 来做列表,要对一些数据进行格式化,推断某字段状态时,发现 formatter 格式化相应的函数不起作用. <table id="list_data" title="未审核报表" class="easyui-datagrid" style="width: auto;height:350px;" url="" toolbar="#toolbar"

EasyUi DataGrid中数据编辑方式及编辑后数据获取,校验处理

EasyUi中的DataGrid提供前台编辑的相关函数. 实现客户选中DataGrid中一列后,对选中列中的一个字段进行编辑,并对数据进行实时校验后,传递至后台保存的需求, 主要涉及到DataGrid中设置编辑单元格,获取编辑单元格,编辑单元格的onchange事件处理,通过当前光标所在编辑单元格获取所在行. 1. 设置编辑单元格 在列定义中增加editor属性,参数为type,options eg: {title:'上级分配额度',field:'assigned_amount_temp',wi