Kendo grid dataItem不返回所有列

时间:2017-03-13 16:57:45

标签: kendo-grid

我有一个简单的网格,显示id,name和city是一个多选(行)。我发现这很令人难以置信,dataItem永远不会返回id字段的名称和城市。对我来说,这似乎是一个错误。网格显示所有字段。如何从数据项中获取id?

 opts.change = function(e) {
                    var selectedRows = ctrl.grid.select();
                    var selectedDataItems = [];
                    for (var i = 0; i < selectedRows.length; i++) {
                        var dataItem = ctrl.grid.dataItem(selectedRows[i]);
                        console.log(dataItem); // never has id on it
                        selectedDataItems.push(dataItem);
                    }

完整配置字符串减去传输(opts)&amp;改变(上图):

{
  "dataSource": {
    "pageSize": 20,
    "serverPaging": true,
    "serverFiltering": true,
    "serverSorting": true,
    "serverGrouping": false,
    "schema": {
      "total": "total",
      "data": "results",
      "model": {
        "id": "id"
      }
    }
  },
  "height": 300,
  "width": "100%",
  "filterable": {
    "extra": false
  },
  "groupable": false,
  "sortable": true,
  "pageable": true,
  "columns": [
    {
      "field": "id",
      "title": "ID",
      "hidden": false
    },
    {
      "field": "name",
      "hyperlink": "/abc/{id}",
      "icon": "bath"
    },
    {
      "field": "city"
    }
  ],
  "selectable": "multiple,row"
}

这是选择测试。 https://db.tt/yDLD44UNjN我正在将数据项输出到文本框,并且它应该是id

奇怪的是,如果我输出所有列(不指定它们),id将会通过。

3 个答案:

答案 0 :(得分:0)

取决于您如何定义网格。如果明确定义网格: 然后,您应该定义模型,使其看起来像这样:

.DataSource(dataSource => dataSource

        .Ajax()

        .Model(model => model.Id(p => p.Id))

答案 1 :(得分:0)

如果您使用的是JavaScript API,那么您应该尝试明确定义数据模型,使其看起来像这样:

dbo

答案 2 :(得分:0)

我要发布我的解决方案,但我真的想要一个更好的解决方案,所以我不会接受我的。似乎与数据源为id的列存在某种冲突。除了改变我不会做的数据库之外,我唯一能让它工作的方法是:

  1. 在网格的数据回调中添加一个名为_id的新属性,并将其设置为id

     data: function(response) {
            for(var i=0;i<response.results.length;i++) {
               if (response.results[i].id) {
                   response.results[i]._id= response.results[i].id;
               }
            }
            return response.results;
          }
    
  2. 然后在更改事件中,将id设置为_id。这真的是hacky而不是我首选的解决方案,但这是唯一可行的方法。

           opts.change = function(e) {
                        var selectedRows = ctrl.grid.select();
                        var selectedDataItems = [];
                        for (var i = 0; i < selectedRows.length; i++) {
                            var dataItem = ctrl.grid.dataItem(selectedRows[i]);
                            dataItem.id= dataItem._id;
    
                            selectedDataItems.push(dataItem);
                        }
                        ctrl.events.change(selectedDataItems);
                    }
    

    我尝试了模型,id等的所有组合,但似乎都没有。