【问题标题】:Adding items to a Kendo multiSelect将项目添加到 Kendo 多选
【发布时间】:2015-01-21 11:18:56
【问题描述】:

我有一个 Kendo Grid,在其 DataBound 事件中,我想将其数据源添加到 Kendo MultiSelect。因此,当加载网格中的数据时,会触发以下函数。

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

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();
}

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

我将它们添加到 multiSelect 的数据源中,最后一行是刷新它并显示新数据,但它没有。 multiSelect 保持为空。

【问题讨论】:

    标签: javascript kendo-ui kendo-multiselect


    【解决方案1】:

    尝试以下方法:

    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>

    【讨论】:

    • 我删除了最后一行 multiSelect.dataSource.read(); 并且 multiSelect 不再为空,但它有项目 [object Object],即网格记录的数量。根据您的建议,它显示相同......我错过了什么?
    • 您可能没有定义dataTextField: "text"dataValueField: "value"
    • 好的,现在可以了。再次感谢 OnaBai,您确实是剑道专家。
    • 我曾经是,但从一月起不再是 ;-) 很高兴为您提供帮助
    • 我知道我们不应该在这里聊天,但是为什么从一月份开始就不再聊天了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多