2014-01-07 39 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

當談到內嵌式編輯時,這有點棘手。首先,您需要將編輯事件綁定到網格。

.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'直接訪問模型,而不是從最近的行中獲取模型。 –