2014-01-07 2 views
1

Скажем, у меня есть данные, как это:Фильтр ForeignKey на редактирование в кэндо сетке

[ 
    {ID: 1, SomeForeignKeyID: 1, FkLimitation: "Local"}, 
    {ID: 2, SomeForeignKeyID: 532, FkLimitation: "Foreign"} 
] 

Кендо Сетка использует эти данные:

columns.Bound(m => m.ID); 
columns.ForeignKey(p => p.SomeForeignKeyID, ViewBag.ForeignKeys as IEnumerable<object>, "Value", "Name"); 

Вот проблема: как ограничить доступный значения в столбце ForeignKey? Напр. - если FkLimitation == «Локальный», я бы хотел, чтобы ForeignKey разрешил выбирать значения 1/2/3/4, а если FkLimitation == «Foreign», я бы хотел, чтобы ForeignKey разрешил выбирать значения 532/232/432.

Режим редактирования InCell.

ответ

2

Это немного сложно, когда дело доходит до редактирования In-Cell. Во-первых, вам нужно связать событие редактирования с сеткой.

.Events(events => events.Edit("gridEdit")) 

В обработчике событий вам нужно будет найти элемент данных текущей строки. После этого вы можете создавать различные фильтры на основе значения «FkLimitation» и просто применять его к источнику данных выпадающего списка.

function gridEdit(e) { 
    var inputLength = e.container.find("input[name='SomeForeignKeyID']").length; 
    if (inputLength > 0) { // user is currently editing the SomeForeignKeyID column 
     var dataItem = null; 
     var row = $('#SomeForeignKeyID').closest('tr'); 
     if (row.length > 0) // retrieve the data item of the current row 
      dataItem = $("#gridId").data("kendoGrid").dataItem(row); 
     if (dataItem != null) { 
      var filter = null; 
      if (dataItem.FkLimitation == 'Local') { 
       filter = { 
        logic: 'or', 
        filters: [ 
         { field: 'Value', operator: 'eq', value: 1 }, 
         { field: 'Value', operator: 'eq', value: 2 }, 
         { field: 'Value', operator: 'eq', value: 3 }, 
         { field: 'Value', operator: 'eq', value: 4 } 
        ] 
       }; 
      } else if (dataItem.FkLimitation == 'Foreign') { 
       filter = { 
        logic: 'or', 
        filters: [ 
         { field: 'Value', operator: 'eq', value: 532 }, 
         { field: 'Value', operator: 'eq', value: 232 }, 
         { field: 'Value', operator: 'eq', value: 432 } 
        ] 
       }; 
      } 
      // filter/limit the values in the drop down list 
      $('#SomeForeignKeyID').data('kendoDropDownList').dataSource.filter(filter); 
     } 
    } 
} 
+0

Вы можете получить доступ к модели непосредственно через 'e.model', а не извлекать ее из ближайшей строки. –

Смежные вопросы