提问者:小点点

头部和内容的Kendo网格Json数据


我正在处理ASP.NET MVC5项目,需要用Kendo Grid jQuery更改表。

当前,我正在从Api控制器返回数据,该Api控制器如下所示:

[
headers:{{
            "label": "Name",
            "id": "name",
            "isfixed": true,
            "width": "200px"
        },
        {
            "width": "200px",
            "isfixed": false,
            "id": "city",
            "label": "City"
        },
        },
rows:{
        {name:"Joe",city:"Berlin"},
        {name:"Doe",city:"London"},
        ...
        }
]

剑道似乎不喜欢这种格式。只有这样发送JSON,它才起作用:

[
  { name: "Joe", City: "Berlin" },
  { name: "Doe", City: "Londo" }
]

问题:我可以使剑道网格工作与第一种类型的数据,因为我需要动态列和不同的表的数据?


共1个答案

匿名用户

如何实现这一点的详细说明如下:https://docs.telerik.com/kendo-ui/knowledge-base/create-with-dynamic-columns-and-data-types

实现它的代码:


    <div id="grid" style="width:1000px;"></div>

    <script>
      var isDateField =[];
      $.ajax({
        url: "https://www.mocky.io/v2/5835e736110000020e0c003c",
        dataType: "jsonp",
        success: function(result) {
          generateGrid(result);
        }
      });

      function generateGrid(response) {
        var model = generateModel(response);
        var columns = generateColumns(response);

        var grid = $("#grid").kendoGrid({
          dataSource: {
            transport:{
              read:  function(options){
                options.success(response.data);
              }
            },
            pageSize: 5,
            schema: {
              model: model
            }
          },
          columns: columns,
          pageable: true,
          editable:true
        });
      }

      function generateColumns(response){
        var columnNames = response["columns"];
        return columnNames.map(function(name){
          return { field: name, format: (isDateField[name] ? "{0:D}" : "") };
        })
      }

      function generateModel(response) {

        var sampleDataItem = response["data"][0];

        var model = {};
        var fields = {};
        for (var property in sampleDataItem) {
          if(property.indexOf("ID") !== -1){
            model["id"] = property;
          }
          var propType = typeof sampleDataItem[property];

          if (propType === "number" ) {
            fields[property] = {
              type: "number",
              validation: {
                required: true
              }
            };
            if(model.id === property){
              fields[property].editable = false;
              fields[property].validation.required = false;
            }
          } else if (propType === "boolean") {
            fields[property] = {
              type: "boolean"
            };
          } else if (propType === "string") {
            var parsedDate = kendo.parseDate(sampleDataItem[property]);
            if (parsedDate) {
              fields[property] = {
                type: "date",
                validation: {
                  required: true
                }
              };
              isDateField[property] = true;
            } else {
              fields[property] = {
                validation: {
                  required: true
                }
              };
            }
          } else {
            fields[property] = {
              validation: {
                required: true
              }
            };
          }
        }

        model.fields = fields;

        return model;
      }
    </script>