剑道网格计算变量

时间:2017-01-25 17:15:20

标签: javascript kendo-grid kendo-asp.net-mvc

我想在我正在使用的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”。

1 个答案:

答案 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 ?