【问题标题】:how to read single record in Kendo Grid?如何在 Kendo Grid 中读取单个记录?
【发布时间】:2014-11-11 15:01:03
【问题描述】:

我使用 asp.net web api 将数据读入我的剑道网格。当用户单击一个单元格时,它会更改为编辑模式。我想要实现的是,当它更改为编辑模式时,它还应该从后端获取最新记录。是否有可能通过类似的方式:

 edit:function(e){ 
e.model.read();
}

【问题讨论】:

  • 如果您只想读取一条记录,您应该在数据源中使用过滤器,但这可能会刷新您的网格,因为这是一个可观察对象。 解决方案 将向服务器发送请求(使用 ajax)以获取数据。但是为什么需要从服务器而不是从 DataSource 中读取呢?
  • 您好 OnaBai,感谢您的回复。我的要求是,如果有人打开了很长时间的表单,并且当底层数据库中的某些内容发生更改时,我需要将该数据重新加载到该记录中。
  • 基本上你需要更新网格,然后才允许进入编辑模式,对吧?或者那将是一个太重的电话?,即更新网格是一个缓慢的请求?
  • 您是否意识到edit 事件实际上是在进入编辑模式后触发的?无论您为刷新行做什么都意味着退出编辑模式,使用来自服务器的数据更新值,然后再次进入编辑模式。并且拥有强大的实时背景,我会说如果这样做是服务器实际更新的时候呢?您无法确定... 更进一步,如果在您编辑该行时更新该行怎么办?没有办法解决!!!

标签: jquery asp.net-web-api kendo-ui kendo-grid kendo-datasource


【解决方案1】:

这可以做你想做的事,但请记住,尽管你从服务器获取数据,但请记住我在对你的问题的评论中所说的话:

您是否意识到在进入编辑模式后实际上会触发编辑事件?
无论您为刷新行做什么都意味着退出编辑模式,使用来自服务器的数据更新值,然后再次进入编辑模式。
并且拥有强大的实时背景,我会问你:
* 如果这样做是服务器实际更新的时候呢?您无法确定...
* 更进一步,如果在编辑时更新了行怎么办?

说了这么多:

基本技巧是,如果您正在编辑单元格,因为用户点击了它,那么我将向服务器发送读取请求并取消编辑。作为新读取的结果,我将有一个新的dataBound 事件,我会询问这是否是强制读取的结果,如果是,我将进入同一单元格的编辑模式。

这是代码:

$("#grid").kendoGrid({
    editingCell: -1,
    dataSource: dataSource,
    columns: [
        ...
    ],
    editable: "incell",
    edit:function(e){
        if (this.options.editingCell >= 0) {
            this.options.editingCell = -1;
        } else {
            this.options.editingCell = this.tbody.find("td").index(e.container);
            this.dataSource.read();
            e.preventDefault();
        }
    },
    dataBound: function(e) {
        if (this.options.editingCell >= 0) {
            this.editCell($("#grid td:eq("+ this.options.editingCell + ")"));
        }
    }
});

下面还有一个代码sn-p(说明,打开它两次并玩一个和另一个,你会看到当进入编辑模式时,它实际上被关闭,刷新并再次编辑)。记得点击“保存更改”以将更改发送到服务器。

$(document).ready(function () {
  var crudServiceBaseUrl = "http://demos.telerik.com/kendo-ui/service";
  var dataSource = new kendo.data.DataSource({
    transport: {
      read:  {
        url: crudServiceBaseUrl + "/Products",
        dataType: "jsonp",
        cache: false
      },
      update: {
        url: crudServiceBaseUrl + "/Products/Update",
        dataType: "jsonp"
      },
      parameterMap: function(options, operation) {
        if (operation !== "read" && options.models) {
          return {models: kendo.stringify(options.models)};
        }
      }
    },
    batch: true,
    pageSize: 5,
    schema: {
      model: {
        id: "ProductID",
        fields: {
          ProductID: { editable: false, nullable: true },
          ProductName: { validation: { required: true } },
          UnitsInStock: { type: "number", validation: { min: 0, required: true } }
        }
      }
    }
  });

  $("#grid").kendoGrid({
    editingCell: -1,
    dataSource: dataSource,
    pageable: {
      buttonCount : 2
    },
    toolbar: ["save"],
    columns: [
      "ProductName",
      { field: "UnitsInStock", title:"Stock", width: "120px" }
    ],
    editable: "incell",
    edit:function(e){
      console.log("edit", this.options.editingCell);
      if (this.options.editingCell >= 0) {
        this.options.editingCell = -1;
      } else {
        console.log("forceRead");
        this.options.editingCell = this.tbody.find("td").index(e.container);
        this.dataSource.read();
        e.preventDefault();
      }
    },
    dataBound: function(e) {
      if (this.options.editingCell >= 0) {
        this.editCell($("#grid td:eq("+ this.options.editingCell + ")"));
      }
    }
  });
});
#grid {
  width: 400px;
}
<style>html { font-size: 12px; font-family: Arial, Helvetica, sans-serif; }</style>
<title></title>
<link href="http://cdn.kendostatic.com/2014.2.1008/styles/kendo.common.min.css" rel="stylesheet" />
<link href="http://cdn.kendostatic.com/2014.2.1008/styles/kendo.default.min.css" rel="stylesheet" />
<script src="http://cdn.kendostatic.com/2014.2.1008/js/jquery.min.js"></script>
<script src="http://cdn.kendostatic.com/2014.2.1008/js/kendo.all.min.js"></script>

<div id="grid"></div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2014-07-31
    相关资源
    最近更新 更多