2017-01-25 2 views
0

Я хотел бы добавить вычисленное поле к сетке Kendo, которую я использую. Вот надрез моего кода:Kendo Grid Calculated Variable

 @{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

Я до сих пор получил ту же ошибку, на этот раз "expiration_date не определен". В других примерах я видел, что вся сетка заключена в сценарий. У меня есть сетка кендо, выходящая за рамки скрипта, который может быть моей проблемой. Все еще ищет решение. –

+0

отредактируйте вопрос и вставьте текущую версию полного кода здесь, я постараюсь помочь, если вы сможете сделать это быстро. –

+1

Я отправил полный код –

ответ

1

Срок годности не был правильно указан в шаблоне col. Я прокомментировал это. Убедитесь, что оно написано так, как оно есть в модели Устав

Все примеры, использующие работу клиентского шаблона со столбцом Bound, я сделал то же самое в фрагменте кода ниже. вы также можете раскомментировать свою строку и исправить написание срока действия и посмотреть, действительно ли ваша идея не прикрепляться к связанным коллам иным образом использует существующий код фрагмента.

Также я немного скорректировал объявление сетки кендо.

@(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 ?