我正在尝试使用计算列制作网格。 我的问题是,当我更改网格时,不会重新计算列。
页面(asp.net MVC):
@(Html.Kendo().Grid<VistaFlowDTO>()
.Name("Grid")
.Columns(columns =>
{
columns.Bound(o => o.Country).ClientTemplate("#=model.renderCodeList(Country)#");
columns.Bound(o => o.Plant).ClientTemplate("#=model.renderCodeList(Plant)#");
columns.Bound(o => o.Flow).Sortable(false).Filterable(false).ClientTemplate("#=model.renderFlow(Flow)#");
columns.Bound(o => o.State);
columns.Bound(o => o.ConditionStatus).ClientTemplate("#=model.renderCodeList(ConditionStatus)#");
columns.Bound(o => o.DateOfUpdate);
})
.Model(model =>
{
model.Id(p => p.Id);
model.Field(p => p.Flow).DefaultValue((LeftRightDTO)ViewData["Value"]).Editable(false);
})
.Events(e=> e.Save("model.changeGrid"))
的javascript: //模板
function renderFlow(data) {
var left = $(data).prop('Left');
var right = $(data).prop('Right');
return renderLeftRight(left, right, '_');
}
function renderLeftRight(left, right, separator) {
if (!left && !right)
return '';
return "<div class='leftAndRight'><span class='left'>" + left + "</span>" + separator + "<span class='right'>" + right + "</span></div>";
}
//在网格更改时调用
function changeGrid(e) {
if (e.values.Country || e.values.Plant) {
var c = e.values.Country || e.model.Country;
var p = e.values.Plant || e.model.Plant;
e.model.set("Flow.Left", c);
e.model.set("Flow.Right", p);
}
}
Flow(c#class):
public class LeftRightDTO
{
public string Left { get; set; }
public string Right { get; set; }
public LeftRightDTO()
{
}
public LeftRightDTO(string left, string right)
{
this.Left = left;
this.Right = right;
}
}
我找到的唯一可行的例子就是:http://jsfiddle.net/qA8QX/
答案 0 :(得分:0)
我知道这是一个老问题,但万一有人有同样的要求:
您需要在更改模型后刷新网格:
$("#Grid").data("kendoGrid").refresh();