向Kendo multiSelect添加项目 [英] Adding items to a Kendo multiSelect

查看:113
本文介绍了向Kendo multiSelect添加项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Kendo网格,并且在它的DataBound事件上,我想将其数据源添加到Kendo MultiSelect中.因此,当加载网格中的数据时,将触发以下功能.

I've got a Kendo Grid and on its DataBound event, I want to add its data source to a Kendo MultiSelect. So, when the data from the grid is loaded, the below function is fired.

这是到目前为止我尝试过的,但没有成功,但是从代码中可以看到我的意图:

Here's what I have tried so far, without success, but from the code you can see what I intend:

function addToMultiSelect() {
    var multiSelect = $("#multiSelect").data("kendoMultiSelect");
    var grid = $("#grid").data("kendoGrid");
    var places = grid.dataSource._data;

    for (var i = 0; i < places.length; i++) {
        var row = instPlaces[i];

        var id = row.Id;
        var mediumDescription = row.MediumDescription;
        alert(id + " - " + mediumDescription);

        multiSelect.dataSource.insert(i, { text: mediumDescription, value: id })
    }
    multiSelect.dataSource.read();
}

警报正确显示了datagrid所有项目的ID和描述,因此,我正在正确地从网格中获取数据.

The alert properly shows the id and description of all the datagrid's items, so, I'm getting the data from the grid right.

我将它们添加到multiSelect的数据源中,最后一行是刷新它并显示新数据,但事实并非如此. multiSelect保持为空.

I add them to the multiSelect's datasource, the last line is to refresh it and show the new data, but it doesn't. The multiSelect remains empty.

推荐答案

尝试以下操作:

function addToMultiSelect() {
    var multiSelect = $("#multiSelect").data("kendoMultiSelect");
    var grid = $("#grid").data("kendoGrid");
    var places = grid.dataSource.data();

    // Read original data content
    var multiData = multiSelect.dataSource.data();
    for (var i = 0; i < places.length; i++) {
        ...
        // insert new element into copy of multiselect data
        multiData.push({ text: mediumDescription, value: id })
    }
    // Write back the modified data
    multiSelect.dataSource.data(multiData);
}

请参见以下代码示例:

$(document).ready(function() {
  function addToMultiSelect(e) {
    var grid = this;
    var data = this.dataSource.data();

    var multiData = [];
    for (var i = 0; i < data.length; i++) {
      multiData.push({ text: data[i].ShipName, value: i });
    }
    multi.dataSource.data(multiData);
  }

  var multi = $("#multi").kendoMultiSelect({
    dataSource:  {
      data: [
        { text: "ship 1", value: 1 },
        { text: "ship 2", value: 2 },
        { text: "ship 3", value: 3 },
        { text: "ship 4", value: 4 }
      ]
    },
    dataTextField: "text",
    dataValueField: "value"
  }).data("kendoMultiSelect");

  $("#grid").kendoGrid({
    dataSource: {
      type: "odata",
      transport: {
        read: "http://demos.telerik.com/kendo-ui/service/Northwind.svc/Orders"
      },
      schema: {
        model: {
          fields: {
            OrderID: { type: "number" },
            Freight: { type: "number" },
            ShipName: { type: "string" },
            OrderDate: { type: "date" },
            ShipCity: { type: "string" }
          }
        }
      },
      pageSize: 20,
      serverPaging: true,
      serverFiltering: true,
      serverSorting: true
    },
    dataBound: addToMultiSelect,
    height: 550,
    columns: [
      "OrderID",
      "Freight",
      {
        field: "OrderDate",
        title: "Order Date",
        format: "{0:MM/dd/yyyy}"
      },
      {
        field: "ShipName",
        title: "Ship Name"
      }, 
      {
        field: "ShipCity",
        title: "Ship City"
      }
    ]
  });
});

html { font-size: 12px; font-family: Arial, Helvetica, sans-serif; }

<link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.common.min.css" />
<link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.default.min.css" />

<script src="http://cdn.kendostatic.com/2014.3.1316/js/jquery.min.js"></script>
<script src="http://cdn.kendostatic.com/2014.3.1316/js/kendo.all.min.js"></script>

Ship Names copied from Grid DataSource: <input id="multi"/>
Grid
<div id="grid"></div>

这篇关于向Kendo multiSelect添加项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆