Kendo-UI网格使用Javascript在网格中设置值

Mat*_*att 22 javascript data-binding kendo-ui kendo-grid

我只是想知道如何在JavaScript中更改网格中行的值,以便在网格和基础数据源中将其标记为"脏".

例如,我有一个联系人/客户列表.他们有3个字段FirstName/LastName/IsPrimaryContact.只能有1个主要联系人,因此当记录中的主要联系人设置为"真"时,我会使用JavaScript代码循环遍历数据源,并将设置为primary的所有其他联系人设置为false.

JavaScript全部触发正常并且数据字段设置正确但有两个问题:1.网格未更新我对数据源2进行的更改.更改的记录未标记为"脏",因此当我调用Datasource.sync()时没有同步

我可以通过手动设置记录上的脏字段来解决第二个问题,但这似乎不正确.感觉我应该在网格级别更新字段,以便在UI和数据源中处理它.

关于如何解决这个问题的任何想法?

谢谢

Pet*_*bev 39

基本上,当您想要更新记录时,您应该使用模型的set方法.例如,要更新dataSource的第一条记录,您应该像这样更新它:

var firstItem = $('#GridName').data().kendoGrid.dataSource.data()[0];
firstItem.set('FirstName','The updated Name');
Run Code Online (Sandbox Code Playgroud)

上面应该自动将标志标记为脏,它将通知网格有变化,因此网格将自动刷新.

此外,如果要直接检索与特定行相关的对象,可以使用Grid 的dataItem方法.

  • 要避免刷新网格,请直接更新模型的值,而不使用set方法,例如firstItem.FirstName ="新名称"最后,当您完成修改所需的所有模型或字段时,可以调用$(' #GridName ').数据(' kendoGrid').刷新() (7认同)

Eds*_*onF 6

我以一种非常简单有效的方式做到这一点:

 var employee = employeeDataSource.get(employeeId);
     employee.dirty = true;  // set it as dirty
     employeeDataSource.sync();  //Tell the DataSource object to save changes
Run Code Online (Sandbox Code Playgroud)

这是一个古老的问题,但希望它可以对遇到相同问题的任何人有所帮助。