繁体   English   中英

Kendo网格组合框将未定义的数据发送到DataSource

[英]Kendo grid combobox sends undefined data to DataSource

我有一个kendo Grid,其中一个列使用一个组合框,该组合框绑定到一个名为“Worker”的对象(ID,Workername)。 这种方法很好,除非用户将组合框文本设置为与任何下拉选项不匹配的字符串(例如:'xxxx')。 组合框将Worker的值设置为字符串('xxxx')而不是Worker对象,此时dataSource在收到格式错误的数据时停止响应。

我已经在dataSource'change'事件中工作,该事件在网格的'save'事件之后触发。 使用变量myWorkerStart(在网格的编辑事件中捕获)覆盖违规dataItem的属性:

myDataSource.bind("change", function (e) {
        if (e.field) {
            if (e.field == "Worker") {           
                rowDataItem = myGrid.dataItem(myGrid.tbody.find("tr.k-grid-edit-row"));
                var currentWorker = rowDataItem.Worker;
                var myType = $.type(currentWorker);
                if (myType != "object") {
                    alert('Ooooh, BAD worker, reverting to starting value');
                    rowDataItem.set('Worker', myWorkerStart);
                }
            }
        }
        alert("datasource change");
})

我在Telerik论坛的几个主题中看过这个主题,大部分都没有答案。 Telerik支持告诉我,我应该在网格的'save'事件中解决未定义的值,但是在组合框设置行之前会触发。 我可以看到值,但我不确定在哪里可以设置值以防止将未定义的值发送到dataSource(容器,模型)在发送未定义的组合框值之前是否有更好的方法来处理格式错误的数据到网格?

myGrid.bind("save", function (e) {
        myCombo = $('#Worker').data("kendoComboBox");
        rowDataItem = myGrid.dataItem(myGrid.tbody.find("tr.k-grid-edit-row"));          
        myPreviousWorker = e.model.Worker;//Worker previously
        myNewWorker = myCombo.dataItem();//Worker about to be set by selected Combobox.
        if (myNewWorker) {
            alert("GOOD worker");
        } else {
            alert("BAD worker");
        }
        //Manipulate the combobox/container/model values
})

Petur Subev能够提供这样的答案: jsbin

在具有“批量”保存的网格的示例中,网格的“保存”事件检查组合框中的未定义选择,然后将一次(jquery .one())绑定到模型的更改事件以在保存期间设置所需的值仅当组合框选择未定义时。

http://jsbin.com/edamuj/649/edit


//grid configuration setup
save:function(e){          
       if(!e.container.find('[data-role=combobox]').data().kendoComboBox.dataItem())
       {
         e.model.one('change',function(e){
             this.set('test',{CategoryName:"Bevarages",CategoryID: "001"}) 
         }) 

       }

       this.refresh();
    }

没有批量保存(例如内联编辑)的网格的以下示例仅需要在网格保存上触发,并且不需要对模型更改的附加绑定。 Petur的另一个jsbin

save:function(e){
       if(!e.container.find('[data-role=combobox]').data().kendoComboBox.dataItem())
       {
           e.model.set('test',{CategoryName:"Bevarages",CategoryID: "001"})
       }

       this.refresh();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM