【问题标题】:Kendo grid with DropDown, iterate grid setting drop down values剑道网格与下拉,迭代网格设置下拉值
【发布时间】:2014-01-21 12:45:29
【问题描述】:

我正在使用 ASP.NET MVC3、Jquery 和 Kendo UI。

这是我的网格设置的剪辑(我删除了所有不相关的字段):

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 函数,每次下拉更改时都会执行该函数。下拉列表是教师列表。当它发生变化时,我想将网格每一行的教师列设置为在下拉列表中选择的相同值和文本对。

这是我目前所拥有的,你可以看到注释在哪里,我需要放一些代码。我不知道该怎么做:

function teachers_change()
{
    var teacherDL = $("#allTeach").data("kendoDropDownList");
    teachid = teacherDL.value();
    teachName = teacherDL.text();

    $("#Students tr").each(function ()
    {
        var tr = this;
        var cells = tr.cells;
        //RIGHT HERE IS WHERE I WANT TO GET A REFERENCE TO THE DROP DOWN 
        //AND SET THE VALUE TO teachid AND THE TEXT TO teachName
    });
}

【问题讨论】:

    标签: jquery asp.net-mvc asp.net-mvc-3 kendo-ui kendo-grid


    【解决方案1】:

    这应该是自动完成的,如果生成的 DropDownList 的名称被称为你的属性,那么它们应该通过 data-bind 属性绑定。

    在您的情况下,DropDownList 名称应该是“老师”。 Rest 应该自动完成,Grid 使用的整个 dataItem 应该替换为 DropDownList 的 DataItem。

    【讨论】:

    • 彼得,我不确定我是否理解你的回答。你有设置下拉列表的代码行吗?请记住,teacherDL 不在网格上。我这样做的原因是,如果需要,用户可以轻松地为所有学生分配一名教师。
    【解决方案2】:

    经过大量小时的研究,它可能并不漂亮,但它可以完成工作。

    如果有人有更好的解决方案,请发帖!!!

    grid.dataSource._data[this.rowIndex].teacher.teacherId = teachid ;
    grid.dataSource._data[this.rowIndex].teacher.teacherName = teachName;
    grid.dataSource._data[this.rowIndex].dirty = true;
    TDIndex = (this.rowIndex * 17) +3;
    grid.table[0].cells[TDIndex].innerHTML = '<span class="k-dirty"></span>' + teachName;
    grid._data[this.rowIndex].teacher.teacherId = teachid;
    grid._data[this.rowIndex].teacher.teacherName = teachName;
    

    前两行和最后两行直接修改了下拉菜单使用的数据源。中间的线条设置了实际的网格字段,因此当下拉菜单未打开时,您可以在网格中看到选定的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多