首页 文章

在Kendo Grid中添加下拉列表

提问于
浏览
2

我正在尝试在kendo网格中添加一个DropDown,但它会显示一个TextBox

@(Html.Kendo().Grid((IEnumerable<Doc.Web.Models.Vendor.DocumentsDetails>)Model.documents_lst)
    .Name("grid").Scrollable()

    .Columns(columns =>
    {

        columns.Bound(o => o.DocumentRevisionID).Visible(false);
        columns.Bound(o => o.Documentnumber).Title("Document #").Width(150);
        columns.Bound(o => o.Revision).Title("Revision").Width(80);
        columns.Bound(o => o.RevisionDate).Format("{0:dd/MM/yyyy}").Title("Rev Date").Width(85);
        columns.Bound(o => o.RevisionStatus).Title("Revision</br> Status").Width(100);
        columns.Bound(s => s.DocNumberPurpose).ClientTemplate((@Html.Kendo().DropDownList()
     .BindTo((System.Collections.IEnumerable)ViewData["Purpose"])
      .Name("DocNumberPurpose")
       .DataTextField("Text")
          .DataValueField("Value")
          .ToClientTemplate()).ToHtmlString());

    })
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(model => model.Id(o => o.DocumentRevisionID))
        .Model(model=>model.Field(o=>o.DocNumberPurpose).Editable(false))
    )

    .Events(ev=>ev.DataBound("onGridDataBound"))
    .Pageable()
    .Sortable()
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(5)
        .Events(events => events.Error("error_handler"))
        .Model(model => model.Id(p => p.DocumentRevisionID))
        .Read(read => read.Action("EditingInline_Read", "DesignCoverSheet").Data("additionalInfo"))

    )

     )

 <script>

         function onGridDataBound(e) {
             $('#grid script').appendTo(document.body);
         }

 </script>

3 回答

  • -1

    你真的非常接近:

    columns.Bound(property => property.neatProperty).Width(38).EditorTemplateName("neatPropertyDropDownList").Title("NeatProperty")
    

    然后在一个名为“neatPropertyDropDownList.cshtml”的单独视图中

    @using System.Collections;
    
    @(Html.Kendo().DropDownList()
                .Name("NeatProperty")       
                .DataTextField("Value")
                .DataValueField("Text")
                .BindTo("don't forget to bind!")
     )
    
  • 1

    检查this article以获取您正在尝试执行的操作的详细示例,特别是在步骤3中

    第3步 - 嵌入Kendo下拉列表

    基本上你可以用以下方式做到这一点:

    • 在Kendo网格中,模型的属性外键必须链接到接受模板名称的EditorTemplateName . 举个例子:
    columns.Bound(e => e.CompanyId).EditorTemplateName("CompaniesList").Title("Company").ClientTemplate("#:CompanyName#");
    

    上例中的模板名称是“CompaniesList”,它将是EditorTemplates文件夹中的cshtml视图文件 .

    根据上面的文章:

    EditorTemplateName指定网格,当处于“创建”或“编辑”模式时,模板应放在名为“CompaniesList”的数据文件中,该文件位于目录中,名称为EditorTemplates目录 . 因此,后续步骤涉及通过名称“EditorTemplates”创建文件夹,并在其中放置名称为“CompaniesList”的空视图 . 代码位“ClientTemplate(”#:CompanyName#“)”表示当显示处于视图模式时,(即,不创建或编辑)必须显示CompanyName(在这种情况下,它是“Microsoft”) . 一旦完成,剩下要做的就是创建将在视图中使用的下拉列表 .

    创建“CompaniesList”编辑器模板文件后,在其中定义Kendo下拉列表,如下所示:

    @using System.Collections
    
    @model System.Int32
    
    @(Html.Kendo().DropDownList()
    
    .BindTo((IEnumerable)ViewBag.Companies)
    
    .OptionLabel("- Select Company - ")
    
    .DataValueField("Id")
    
    .DataTextField("Name")
    
    .Name("CompanyId")
    
    )
    

    请注意,下拉名称必须与网格中的列属性完全相同,即“CompanyId”

  • 3

    您可以查看Kendo Grid ForeignKey Column概念 . 它可以用作

    columns.ForeignKey(p => p.CategoryID, (System.Collections.IEnumerable)ViewData["categories"], "CategoryID", "CategoryName").Title("Category").Width(150);
    

    细节可以在这里找到http://demos.telerik.com/kendo-ui/web/grid/foreignkeycolumn.html

相关问题