1

我正在使用 Kendo+razor,我想创建一个没有任何特定数据模型的 Kendo 网格(在我的情况下,我必须显示用户输入的 SQL 查询的结果,因此结果可以有任何数字/列类型)。为了使其通用,我尝试将网格绑定到 System.data.DataTable 和一个 ajax 调用来填充该网格。第一次加载时它工作正常,但是当我重新填充相同的网格时,它不会更新其列名。

场景:
Ajax 调用是在单击按钮以使用查询结果填充网格时进行的。在第一次 ajax 调用时,结果是一个带有属性 id、name 和 description 的 JSON。网格显示正确的数据,上面提到的 3 列和 4 行。
在第二个 ajax 调用中,响应 JSON 包含属性 UserName、UserType、Address、PhoneNumber,这一次网格不更新其模型绑定,列保持前三列 id、name 和 description,但行数更新为没有其中的数据(因为返回的 JSON 中不存在列)

我想将列重新绑定到每次都可能不同的返回 JSON 属性。

这是我的 HTML 代码:

@model System.Data.DataTable
<div>
@(Html.Kendo().Grid(Model)
.Name("ResultsGrid") 
.TableHtmlAttributes(new { Class = "kendoGrid" })
)
</div>

和按钮点击代码上的Javascript:

function execute() {
 $.ajax({
 url: "something something",
 type: "GET",
 contentType: "application/json;charset=utf-8",
 data: "",
 dataType: "json",
 success: function (data) {
        $("#ResultsGrid").kendoGrid({
              scrollable: false,
              pageable: true,
              sortable: true,
              resizable: true,
              dataSource: {
                        data: data,
                        pageSize: 5
                    }
                });
 }
}

如何刷新网格以将列绑定到新的 JSON 属性?

4

2 回答 2

1

您首先需要销毁旧网格,然后创建一个新网格:

success: function(data) {
    // get reference to the grid instance
    var grid = $("#ResultsGrid").data("kendoGrid");
    // destroy it
    grid.destroy();
    $("#ResultsGrid")
        .empty() // clear the old HTML
        .kendoGrid( {
           dataSource: {
              data: data,
              pageSize: 5
           }
        });

}
于 2013-04-18T08:16:17.287 回答
0
success: function(data) {
// get reference to the grid instance
var grid = $("#ResultsGrid").data("kendoGrid");
// destroy it
grid.destroy();
$("#ResultsGrid")
    .empty() // clear the old HTML
    .kendoGrid( {
       dataSource: {
          data: data,
          pageSize: 5
       }
    });

}
于 2015-02-23T07:02:02.953 回答