我想在我正在使用的Kendo网格中添加一个计算字段。以下是我的代码片段:
@{Html.Kendo().Grid<StatuteMaintenance.Data.Statute>()
.Name("mainGrid")
.Columns(c =>
{
c.Bound(e => e.Statute_Number);
c.Bound(e => e.Statute_Description);
c.Bound(e => e.Effective_Start_Date).Format("{0:MM/dd/yyyy}");
c.Bound(e => e.Expiration_Date).Format("{0:MM/dd/yyyy}");
c.Bound(e => e.VIO_Type);
c.Bound(e => e.Fine_Amount);
c.Template(e => { }).ClientTemplate("#=calculate(Exipration_Date)#");//should be handled in model.
if (Roles.IsUserInRole("NSP\\IT-Development All")) { c.Command(command => { command.Edit(); }); }
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Sortable()
.Filterable()
.Pageable(p => p
.Refresh(true)
.PageSizes(true)
)
.DataSource(d => d
.Ajax()
.Model(m =>
{
m.Id(e => e.TreeID);
m.Field(e => e.Statute_Number).Editable(false);
m.Field(e => e.VIO_Type).Editable(true);
m.Field(e => e.Statute_Description).Editable(false);
m.Field(e => e.Effective_Start_Date).Editable(false);
m.Field(e => e.Expiration_Date).Editable(false);
//m.Field(e => e.CurrentlyEffective).Editable(false);
}
)
.Read(r => r.Action("VioTypeGridDataSource", "VIOType"))
.Update(r => r.Action("VioTypeGridUpdate", "VIOType"))
.Sort(s => s.Add(e => e.Statute_Number).Ascending())
)
.Render();
}
<script>
function calculate(s) {
console.log(s);
result = "";
if (s.Expiration_Date < DateTime.Now) {
result = "No"
}
else {
result = "Yes"
}
return result;
}
我得到一个运行时错误,“s”未定义。
我是否正确地解决了这个问题?我查看了其他示例,并且在计算中没有“DateTime”。
答案 0 :(得分:1)
模板col中的到期日期拼写不正确。我已经评论过了。确保它与模型规约
中的拼写完全相同使用客户端模板的所有示例都使用Bound列我在下面的代码片段中完成了相同的操作。你也可以取消注释你的行并更正到期的拼写,看看你的想法是否附加了绑定col其他方面使用现有的代码片段是有效和有效的。
我也稍微调整了剑道网格声明。
@(Html.Kendo().Grid<StatuteMaintenance.Data.Statute>()
.Name("mainGrid")
.Columns(c =>
{
c.Bound(e => e.Statute_Number);
c.Bound(e => e.Statute_Description);
c.Bound(e => e.Effective_Start_Date).Format("{0:MM/dd/yyyy}");
c.Bound(e => e.Expiration_Date).Format("{0:MM/dd/yyyy}");
c.Bound(e => e.VIO_Type);
c.Bound(e => e.Fine_Amount);
//c.Template(e => { }).ClientTemplate("#=calculate(Expiration_Date)#");//should //be handled in model.
c.Bound( e=>e.Expiration_Date).ClientTemplate("#=calculate(Expiration_Date)#");
if (Roles.IsUserInRole("NSP\\IT-Development All")) { c.Command(command => { command.Edit(); }); }
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Sortable()
.Filterable()
.Pageable(p => p
.Refresh(true)
.PageSizes(true)
)
.DataSource(d => d
.Ajax()
.Model(m =>
{
m.Id(e => e.TreeID);
m.Field(e => e.Statute_Number).Editable(false);
m.Field(e => e.VIO_Type).Editable(true);
m.Field(e => e.Statute_Description).Editable(false);
m.Field(e => e.Effective_Start_Date).Editable(false);
m.Field(e => e.Expiration_Date).Editable(false);
//m.Field(e => e.CurrentlyEffective).Editable(false);
}
)
.Read(r => r.Action("VioTypeGridDataSource", "VIOType"))
.Update(r => r.Action("VioTypeGridUpdate", "VIOType"))
.Sort(s => s.Add(e => e.Statute_Number).Ascending())
)
.Render();
)
<script>
function calculate(s) {
console.log(s);
// result = "";
// if (s.Expiration_Date < DateTime.Now) {
// result = "No"
//}
// else {
// result = "Yes"
//}
// return result;
}
查看使用HTML5
完成的示例How to pass value to javascript function on grid using ClientTemplate using HTML5 ?