2014-02-06 82 views
2

我正在使用帶有Kendo UI和Jquery的ASP.NET MVC 3。在網格上引用Kendo UI(ASP.NET MVC)下拉列表

這與我以前提出的問題類似,但不一樣。

我有一個Kendo UI網格,在這個網格上有一個下拉菜單。所以每一行都有一個下拉菜單。我想遍歷網格的每一行,並將所有值設置爲指定的值。 Kendo的下拉菜單中有一些方法可以讓我獲取和設置下拉菜單的值,但是我在獲取對下拉菜單的引用時遇到了問題,所以我可以使用get和set方法(在網格的上下文中)。

這裏是我的網是什麼樣子:

Html.Kendo() 
.Grid<MyProject.Models.Domain.Students>() 
.Name("Students") 
.Sortable(settings => settings.Enabled(false)) 
.Filterable(settings => settings.Enabled(false)) 
.Resizable(resizing => resizing.Columns(true)) 
.Scrollable(settings => settings.Enabled(true))  
.HtmlAttributes(new { style = "font-size: 85%;" }) 
.Columns(columns => 
    { 
     columns.Bound(o => o.StudentId).Title("StudentId").Hidden(); 
     columns.Bound(o => o.Name).Title("Student Name").Width(200); 
     columns.Bound(o => o.teacher).Title("Teacher") 
      .ClientTemplate("#=data.teacher ? teacher.teacherName : ''#") 
      .Width(150) 
      .Filterable(false); 
    }) 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .Batch(true) 
     .ServerOperation(false) 
     .Model(model => 
     { 
      model.Id(c => c.StudentId); 
      model.Field(c => c.teacher);              
     }) 
     .Events(events => events.Error("Field_onError")) 
     .Read(read => read.Action("_AjaxGetFields", "Student")) 
     .Update("_AjaxUpdateFields", "Student") 
     .Destroy("_AjaxDelFields", "Student")) 
     .Events(events => 
      events 
       .DataBound("Fields_onDataBound") 
       .Change("onFieldSelect") 
       .Edit("onFieldEdit") 
     ) 
     .ToolBar(commands => 
     { 
      commands.Save().HtmlAttributes(new { id = "saveField" }); 
     }) 
     .Scrollable(scrollable => scrollable.Height("375px")) 
     .Selectable() 
     .Editable(editing => 
      editing.Mode(Kendo.Mvc.UI.GridEditMode.InCell) 
     ).Render(); 

下面是下拉列模板:

@(Html.Kendo().DropDownList() 
.Name(ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)) 
.DataValueField("TeacherId")  
.DataTextField("TeacherName") 
.DataSource(source => 
{ 
    source.Read(read => 
    { 
     read 
      .Action("_SelectTeacherList","Teacher") 
      .Data("onTeacherDataBinding"); 
    }) 
    .ServerFiltering(true); 
}) 
.Events(e => e   
    .Change("dropdownlist_change") 
) 

這裏是我重複的行在jQuery腳本中的網格:

$("#fieldDef tr:has(td)").each(function() 
{ 
    //HERE IS WHERE I WANT TO REFERENCE THE DROP DOWN FOR THE CURRENT GRID ROW 
    // I WANT TO SET EACH DROPDOWN TO A SPECIFIED VALUE HERE 
} 

那麼我怎樣才能得到這個網格內下拉的參考?一旦我得到一個參考,我可以使用所有的劍道方法來設置它。 Kendo文檔向我們展示瞭如何得到一個下拉菜單的引用,但不是當它位於網格中時。

回答

2

您可以使用edit事件電網:

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

<script> 
function edit(e) { 
var ddl = e.container.find("[data-role=dropdownlist]").data("kendoDropDownList"); 
} 
</script> 
+0

?有沒有辦法提供二級過濾器? – DoomerDGR8

+1

Yep: var ddl = e.container.find(「[data-role = dropdownlist]」)。eq(2).data(「kendoDropDownList」); –

1

你可以使用你的迭代器內的jQuery closest功能:如果有兩個或兩個以上的下拉列表中

$(this).closest("[data-role=dropdownlist]").data("kendoDropDownList"); 
+0

感謝您的幫助。我無法得到這個工作。它不斷返回undefined。我不知道爲什麼,但我確實獲得了Atanas提供的其他解決方案。 – carlg