2014-02-06 53 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