当前位置: 首页 > 知识库问答 >
问题:

剑道网格内联编辑中的多选列表

殷烨
2023-03-14

我需要在剑道网格(内联编辑)中使用多重选择列表,以便用户可以从每行列表中选择多个值。

以下是我的要求:

  1. 在显示时,剑道网格应该显示所有选定值的逗号分隔列表。
  2. 在添加时,剑道网格应该显示多重选择列表,并允许选择多个值。
  3. 在编辑时,剑道网格应该显示具有已选择值的多选列表。用户应该能够修改从列表中选择和添加/删除项目。

当用户点击更新/保存按钮时,多选列表中的选定值应该在代码后面(在更新ajax操作中)以及行的id中可用。

以下是我目前的工作:

我采取的方法类似于在剑道内联网格中使用下拉列表。

我创建了一个编辑器模板,用于在添加/编辑时显示多选。

以下是代码:

@model List<Namespace.CompanyConnector>
@using Kendo.Mvc.UI

@(Html.Kendo().MultiSelectFor(c=>c)

      .Name("company_connector_id")
      .DataTextField("connector_name")
      .DataValueField("company_connector_id")
      .Placeholder("Select connector...")

              .AutoBind(false)
                        .Value((List<int>)ViewData["SelectedValues"])
                .DataSource(source =>
                {
                    source.Read(read =>
                    {
                        read.Action("GetCompanyConnectors", "BrandConnector");
                    })
                    .ServerFiltering(true);
                })
           )
@Html.ValidationMessageFor(m => m)

说明:我将一个模型类列表绑定到多选,并在读取操作中设置数据源。为了在编辑时选择选定的值,我创建了一个函数,该函数返回选定值的id,并将其放在读取操作中的视图数据中。

我在索引页中使用了此编辑器模板,代码如下:

@{Html.Kendo().Grid<Cee.DomainObjects.DomainObjects.BrandConnector>()
.Name("BrandConnectorGrid")
.Filterable()
.Events(e => e.Edit("onEdit"))
.DataSource(dataSource => dataSource
.Ajax()
.Events(e => e.Error("error_handler").RequestEnd("onRequestEnd"))
.ServerOperation(false)
.Model(model =>
{
  model.Id(p => p.brand_id);
  model.Field(e => e.CompanyConnectorList).DefaultValue(new 
  List<Cee.DomainObjects.DomainObjects.CompanyConnector>());
})
.Read(read => read.Action("_AjaxBinding", "BrandConnector",new{companyID = 0 }).Type(HttpVerbs.Post))
.Update(update => update.Action("_UpdateBinding", "BrandConnector").Type(HttpVerbs.Post)))
                               .Columns(columns =>
                               {
                                   columns.Bound(c => c.brand_connector_id).Width(0).Hidden(true);
                                   columns.Bound(c => c.company_id).Width(0).Hidden(true);
                                   columns.Bound(c => c.brand_id).Width(0).Hidden(true);
                                   columns.Bound(u => u.brand_name).Title("Brand").Width("18%").HtmlAttributes(new { @class = "brkWord", @readonly = "readonly" });
                                   columns.ForeignKey(u => u.connector_name, Model.CompanyConnectorList, "company_connector_id", "connector_name").Title("Connector").Width

("16%").HtmlAttributes(new { @class = "brkWord"     }).EditorTemplateName("company_connector_id");
 columns.Command(p => p.Edit().Text("Edit").HtmlAttributes(new { @title = "Edit" })).Width("16%").Title("Edit");
                               })
.Editable(editable => editable.Mode(GridEditMode.InLine).CreateAt(GridInsertRowPosition.Top))
                            .Pageable(pageable => pageable.Refresh(true).PageSizes(GlobalCode.recordPerPageList).ButtonCount(GlobalCode.PageSize).Input(true).Numeric(true))
                                                        .HtmlAttributes(new { @class = "dynamicWidth" })
                                       .Sortable(sorting => sorting.Enabled(true))
                                                        .Render();
                            }

说明:我用过ForeignKey。将其绑定到字符串列“connector\u name”。Connector_name是我从控制器发送的以逗号分隔的ID列表。这里使用编辑器模板。

问题:它在索引中查看/显示时工作正常,但编辑不显示选定的值。此外,我们不会在更新点击后面的代码中获得更新值。

这是实现multiselect list的正确方法,还是需要将集合属性绑定为网格中的列?如果我将集合属性绑定为列,那么如何在显示时显示逗号分隔的字符串?

共有2个答案

白彦
2023-03-14

试试看:

c.约束(p=

js

function connectorsToString(data) {
        var list = data.company_connector_id;
        var result = "";
        for (var i = 0; i < list.length; i++) {
            result += list[i].Name + ';'; 
        }
        return result;
    }

仲孙钊
2023-03-14

请尝试以下代码:

function onEdit(e) {

 var multiselect = $("#YourMutliselectDropdown").data("kendoMultiSelect");

            var IDArray = [];

            $(e.model.propertyName).each(function (index) {
                var ID = e.model.propertyName[index].id;
                IDArray.push(ID);
            });    

            multiselect.value(IDArray);


}

我假设Properties tyName是集合的List,并且它包含id作为属性。

 类似资料:
  • 我想在我的剑道ui网格中进行内联编辑。数据绑定似乎工作正常,但当我在编辑某些内容后单击“更新”按钮时,范围会得到更新,但编辑对话框不会消失。如果单击另一个编辑按钮,它将进入失效状态。毕竟,只有当我至少提供一个伪函数作为k-save时,它才会更新作用域。出于某种原因,单击“取消”按钮确实会更新范围。所以“取消”按钮实现了我对“更新”按钮的期望。 您可能会看到,我想更新客户端的本地范围,而不是向任何服

  • 剑道内嵌单元格编辑不支持日期时间格式。我需要"dd/MMM/yyyy"数据格式,但是剑道网格显示"提交的日期必须是日期"错误。你能告诉我该怎么做吗

  • 我有一个带冰柱的剑道格子

  • 我对剑道网格自定义编辑器有问题。当我点击剑道网格上的编辑按钮时,我想使用dateTimePicker作为我的编辑器。但当我尝试使用dateTimePicker自定义网格时,总会出现错误: 以下是简单的源代码: 或者你可以在这个链接上查看 我已经在许多不同的来源上检查了它,例如: 参考文献1 参考文献2

  • 嗨,我正在尝试做剑道网格,但它不工作,显示网格,但没有显示数据。我不知道怎么了。我不知道parametersMap是怎么工作的。请帮帮我。 控制器 这是剧本 Json数据返回:http://localhost:53232/Home/GetGeo?id=5

  • 我对某些字段的验证有问题。我只想验证几个字段,其他字段不应该验证。在我的Email字段中,我启动了一个函数来检查格式是否正确,但其他字段只是设置为验证。任何帮助都将不胜感激。 使用此代码,在尝试保存/更新时将验证所有字段。我不想验证分机或电话号码。