1

有人可以提供正确的实现方法来利用启用复选框作为网格列的 jqxDropDownList 吗?

以下代码是从 jqwidgets 网格演示代码“cellediting.htm”修改而来的。

我已经实现了一个带有复选框的独立下拉列表,没有任何问题。

我已经实现了一个带有下拉列表(没有复选框)的网格,没有任何问题。

但是,只要我在 initeditor 中放置复选框:true,我就会收到以下错误:

未捕获的类型错误:无法读取未定义 jqxlistbox.js:7 的属性“实例”

在某些“更复杂”的场景中,checkboxes 属性将使用“createeditor”成功,但使用 initeditor 失败。这使我相信可能正在进行一些异步加载并且我构建编辑器的速度太快了。

由于 'checkboxes: true' 属性,以下代码失败。删除它,它工作得很好。

<head>
    <title id='Description'>In order to enter in edit mode, select a grid cell and start typing, "Click" or press the "F2" key. You 
    can also navigate through the cells using the keyboard arrows or with the "Tab" and "Shift + Tab" key combinations. To cancel the cell editing, press the "Esc" key. To save
    the changes press the "Enter" key or select another Grid cell. Pressing the 'Space' key when a checkbox cell is selected will toggle the check state.</title>
    <link rel="stylesheet" href="../../jqwidgets/styles/jqx.base.css" type="text/css" />
    <script type="text/javascript" src="../../scripts/jquery-1.8.3.min.js"></script>
    <script type="text/javascript" src="../../jqwidgets/jqxcore.js"></script>
    <script type="text/javascript" src="../../jqwidgets/jqxdata.js"></script> 
    <script type="text/javascript" src="../../jqwidgets/jqxbuttons.js"></script>
    <script type="text/javascript" src="../../jqwidgets/jqxscrollbar.js"></script>
    <script type="text/javascript" src="../../jqwidgets/jqxmenu.js"></script>
    <script type="text/javascript" src="../../jqwidgets/jqxgrid.js"></script>
    <script type="text/javascript" src="../../jqwidgets/jqxgrid.edit.js"></script>  
    <script type="text/javascript" src="../../jqwidgets/jqxgrid.selection.js"></script> 
    <script type="text/javascript" src="../../jqwidgets/jqxgrid.filter.js"></script> 
    <script type="text/javascript" src="../../jqwidgets/jqxlistbox.js"></script>
    <script type="text/javascript" src="../../jqwidgets/jqxdropdownlist.js"></script>
    <script type="text/javascript" src="../../jqwidgets/jqxcheckbox.js"></script>
    <script type="text/javascript" src="../../jqwidgets/jqxcalendar.js"></script>
    <script type="text/javascript" src="../../jqwidgets/jqxnumberinput.js"></script>
    <script type="text/javascript" src="../../jqwidgets/jqxdatetimeinput.js"></script>
    <script type="text/javascript" src="../../jqwidgets/globalization/globalize.js"></script>
    <script type="text/javascript" src="../../scripts/gettheme.js"></script>
    <script type="text/javascript" src="generatedata.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            // prepare the data
            var data = 
            [
                { firstname: 'joe', lastname: 'smith', sex: 'm' },
                { firstname: 'john', lastname: 'doe', sex: 'm' },
                { firstname: 'jane', lastname: 'doe', sex: 'f' }
            ];
            var source =
            {
                localdata: data,
                datatype: "array",
                updaterow: function (rowid, rowdata, commit) {
                    commit(true);
                },
                datafields:
                [
                    { name: 'firstname', type: 'string' },
                    { name: 'lastname', type: 'string' },
                    { name: 'sex', type: 'string' }
                ]
            };
            var dataAdapter = new $.jqx.dataAdapter(source);
            // initialize jqxGrid
            $("#jqxgrid").jqxGrid(
            {
                width: 685,
                source: dataAdapter,
                editable: true,
                selectionmode: 'multiplecellsadvanced',
                columns: [
                  { text: 'First Name', columntype: 'textbox', datafield: 'firstname', width: 80 },
                  { text: 'Last Name', columntype: 'textbox', datafield: 'lastname', width: 80 },
                  {  text: 'Sex', columntype: 'dropdownlist', datafield: 'sex', width: 195,
                    createeditor: function(row, cellvalue, editor)
                    {
                        var mydata =
                        [
                            { value: "m", label: "Male" },
                            { value: "f", label: "Female" }
                        ];
                        var mysource =
                        {
                            datatype: "array",
                            datafields:
                            [
                                { name: 'label', type: 'string' },
                                { name: 'value', type: 'string' }
                            ],
                            localdata: mydata
                        };
                        var myadapter = new $.jqx.dataAdapter(mysource, { autoBind: true });
                        editor.jqxDropDownList({ checkboxes: true, source: myadapter, displayMember: 'label', valueMember: 'value' });
                    }
                  }
                ]
            });
            // events
            $("#jqxgrid").on('cellbeginedit', function (event) {
                var args = event.args;
                $("#cellbegineditevent").text("Event Type: cellbeginedit, Column: " + args.datafield + ", Row: " + (1 + args.rowindex) + ", Value: " + args.value);
            });
            $("#jqxgrid").on('cellendedit', function (event) {
                var args = event.args;
                $("#cellendeditevent").text("Event Type: cellendedit, Column: " + args.datafield + ", Row: " + (1 + args.rowindex) + ", Value: " + args.value);
            });
        });
    </script>
</head>
<body class='default'>
    <div id='jqxWidget'>
        <div id="jqxgrid"></div>
        <div style="font-size: 12px; font-family: Verdana, Geneva, 'DejaVu Sans', sans-serif; margin-top: 30px;">
            <div id="cellbegineditevent"></div>
            <div style="margin-top: 10px;" id="cellendeditevent"></div>
       </div>
    </div>
</body>
</html>

任何人都可以提供帮助吗?

额外的帮助!!此外,似乎一旦我在下拉列表中选择了一个值,实际的“值”就会更改为显示的“标签”。即,(“男性”或“女性”),但在此示例中,性别字段的唯一有效数据是“m”或“f”。

我在 jqwidgets 官方论坛上问过同样的问题(这里:http ://www.jqwidgets.com/community/topic/dropdownlist-with-checkboxes-as-grid-column-editor/ ),并将发布任何答案如果他们击败社区,他们就会派到这里。

4

2 回答 2

1

据我所知,jQwidgets Grid 中没有带有复选框编辑器的 DropDownList。如果有的话,我认为 jQWidgets 至少会有一个关于它的示例,所以我想你不能在 jqxGrid 小部件中以这种方式使用 DropDownList。

于 2013-05-13T19:44:20.047 回答
0

我知道这是一篇相当老的帖子,但仍然......我很惊讶地看到 JQWidgets 团队的回应,因为他们自己在他们的网站上有这样一个例子,使用带有复选框的下拉列表作为网格编辑器。它可在http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm#demos/jqxgrid/cellcustomediting.htm获得, 其中编辑器用于产品列。

米海

于 2014-07-09T06:30:31.787 回答