2014-02-06 4 views
2

Я использую ASP.NET MVC 3 с пользовательским интерфейсом Kendo и JQuery.Ссылка на раскрывающийся список Kendo UI (ASP.NET MVC) на сетке

Это похоже на предыдущий вопрос, который я задал, но не то же самое.

У меня есть сетка пользовательского интерфейса Kendo, на этой сетке есть выпадающее меню. Таким образом, каждая строка имеет раскрывающийся список. Я хочу выполнить итерацию по каждой строке сетки и установить все значения в указанное значение. В раскрывающемся списке 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 для ее настройки. Документация 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

Спасибо за помощь. Я не мог получить эту работу. Он продолжал возвращаться не определенно. Я не уверен, почему, но я получил другое решение, предоставленное Atanas для работы. – carlg

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