2015-05-12 36 views
2

我想實現與編輯器模板級聯下拉列表我不知道如果劍道支持它,我有一個網格當編輯移動我想篩選數據庫選擇從編輯器模板數據級聯下拉菜單與編輯器模板劍道網格mvc

網格表示可用性時間用戶可以工作 例如柱Timefrom,TimeTo,狀態,可能是由以下

1)可用性 2.)Unavailablity 3.)度假

availablity have diff erent時間模板比較假日和unavailablity

如 「早/天」 - 07.00 -18.00 「漫長的一天」 - 0700 - 22.30 「遲到」 - 12.00 - 22.00 「夜」 - 19.00 - 21.00 「暮光之城」 - 18.00 - 04.00

假日/ Unavailablity - 半天上午 假期/ Unavailablity - 半天下午 假期/ Unavailablity - 晚上 假期/ Unavailablity - 整天

什麼,我想才達到當用戶點擊在編輯模式下,在選擇可用時間模板選項後,狀態欄會顯示[Availablity - Unavilablity - Holiday]下拉菜單,並且將使用相應的時間模板。

例如當用戶點擊Holiday時,在編輯模式下拉下來只有這些選項應該顯示在可用性時間模板列(「早/日」,「長日」,「晚」,「夜」,「暮光」)

下面

是一個演示代碼simmilar概念到應用程序主感謝

主頁

@(Html.Kendo().Grid<Availablity>() 
.Name("grid-availablity") 
.Columns(columns => 
{ 
    columns.Bound(c => c.Id); 
    columns.Bound(c => c.TimeFrom); 
    columns.Bound(c => c.TimeTo); 
    columns.Bound(c => c.Status); 
    columns.Bound(c => c.AvailablityTimeTemplate); // only testing purpose 

    columns.Command(command => 
    { 
     command.Edit(); 
    }); 
}) 
.DataSource(databinding => databinding.Ajax().PageSize(10).ServerOperation(false) 
    .Model(model => model.Id(availablity => availablity.Id)) 
    .Read("GetAvailablityList","Availability") 
    .Update("Availablity_Update","Availability") 
) 

) 

<script> 
function filterTimeTemplate() { 

return { 
    AvailablityTimeTemplate: $("#AvailablityTimeTemplate").val() 
    }; 
} 

</script> 

編輯模板

狀態模板

@(Html.Kendo().DropDownList() 
.Name("Status") 
//.DataTextField("") 
//.DataValueField("Id") 
.OptionLabel("Change Status") 
.BindTo(Enum.GetNames(typeof(Status)).ToList()) 
) 

時間模板

@(Html.Kendo().DropDownList() 
    .Name("AvailablityTimeTemplate") 
    .HtmlAttributes(new { style = "width:300px" }) 
    .OptionLabel("Change Time...") 
     //.DataTextField("") 
     // .DataValueField("") 
     .DataSource(source => 
     { 
      source.Read(read => 
      { 
       read.Action("GetCascadingData", "Availability") 
         .Data("filterTimeTemplate"); 
      }) 
       .ServerFiltering(true); 
     }) 
    .Enable(false) 
    .AutoBind(false) 
    .CascadeFrom("Status") 
) 

類和枚舉

public class Availablity 
{ 
    public string Id { get; set; } 
    public string TimeFrom { get; set; } 
    public string TimeTo { get; set; } 

    [UIHint("AvailablityStatus")] 
    public Status Status { get; set; } 

    [UIHint("TimeTemplate")] 
    public string AvailablityTimeTemplate { get; set; } 

    public List<Availablity> GetAvailablity() 
    { 
     return new List<Availablity>() 
     { 
      new Availablity(){ Id="001", TimeFrom="0700", TimeTo="18.00", Status=Status.Available}, 
      new Availablity(){ Id="002", TimeFrom="0700", TimeTo="23.30", Status=Status.Available}, 
      new Availablity(){ Id="002", TimeFrom="12.00", TimeTo="22.00", Status=Status.Available} 
     }; 
    } 

    public List<string> GetTimeTemplateList(Status status) 
    { 
     List<string> TimeTemplateCollection = null; 
     if (status == Status.Available) { 
      TimeTemplateCollection = new List<string>(){ 
       "Long day","Late","Night","Twilight" 
      }; 
     } else { 
      TimeTemplateCollection = new List<string>(){ 
       "Morning Half Day","Afternoon - Half Day ","Night","Whole Day" 
      }; 
     } 

     return TimeTemplateCollection; 
    } 
} 

public enum Status 
{ 
    Available = 0, 
    UnAvailable = 1, 
    Holiday = 2 
} 

控制器

public JsonResult GetCascadingData(Status availablityStatus) 
    { 
     var availablity = new Availablity(); 
     var data = availablity.GetTimeTemplateList(availablityStatus); 
     return Json(data, JsonRequestBehavior.AllowGet); 
    } 

    public JsonResult GetAvailablityList([DataSourceRequest] DataSourceRequest request) 
    { 
     var availablity = new Availablity(); 
     var data = availablity.GetAvailablity(); 
     return Json(data.AsQueryable().ToDataSourceResult(request)); 
    } 
+0

等什麼,什麼問題呢?它工作嗎? –

+0

它確實工作,下降的時間模板(AvailablityTimeTemplate)是禁用我無法找到任何資源在線 – Kachou

+0

你看到時間模板下拉菜單'。啓用(false)',這使得它被禁用.. –

回答

0

由於您的評論進一步解釋,這是您需要更改

時間模板

@(Html.Kendo().DropDownList() 
    .Name("AvailablityTimeTemplate") 
    .HtmlAttributes(new { style = "width:300px" }) 
    .OptionLabel("Change Time...") 
    .DataSource(source => 
    { 
     source.Read(read => 
     { 
      read.Action("GetCascadingData", "Availability").Data("filterTimeTemplate"); 
     }) 
     .ServerFiltering(true); 
    }) 
    //.Enable(false) should be removed 
    .AutoBind(false) 
    .CascadeFrom("Status") 
) 
+0

謝謝你的作品 – Kachou