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

如何有条件地更改剑道网格中下拉列表的值?

鲁炳
2023-03-14

我正在开发一个包含ASP MVC 5、剑道UI和一些层的项目。其主要思想是,在我从剑道网格中的下拉列中选择一个值之后,例如:

columns.Bound(b => b.Country).ClientTemplate("#=Country.Name#");

它应根据先前的选择更新第二列和第三列:

columns.Bound(b => b.Category).ClientTemplate("#=Category.Name#");
columns.Bound(b => b.Client).ClientTemplate("#=Client.Name#");

我在Telerik文档或论坛中找不到任何示例或想法:

网格/事件

网格/编辑自定义编辑器

刷新/替换外键下拉列表的数据源

我也用正常的下拉列表读了这个例子:

剑道UI DropDownList上的更改触发事件

有人经历过这样的事情吗?我目前的想法是创建N个编辑器模板:

@model Kendo.Mvc.Examples.Models.CategoryViewModel

@(Html.Kendo().DropDownListFor(m => m)
    .DataValueField("CategoryID")
    .DataTextField("CategoryName")
    .BindTo((System.Collections.IEnumerable)ViewData["categories"])
)

然而,对于每一个可能的国家来说,这可能是非常低效的,我仍然不知道如何触发on Change事件。

共有2个答案

龙高超
2023-03-14

我使用了以下方法来使用模板对网格的单个单元格进行样式化。我认为您可以应用这个逻辑来更改DropDownList中的值。

UI for Javascript:

{
    field: "EmployeeName", type: "string", width: "55px", title: "Employee Name", 
        template: "#= GetEditTemplate(data) #"
}

MVC的用户界面:

...
columns.Bound(t => t.EmployeeName).Title("Status Name").Template(@<text></text>)
    .ClientTemplate("#= GetEditTemplate(data)#").Width("55px");
...

示例:此处数据参数传递给Javascript方法,并在条件中使用:

<script>
//Change the color of the cell value according to the given condition
function GetEditTemplate(data) {
    var html;

    if (data.StatusID == 1) {
        html = kendo.format(
        "<span class='text-success'>" +
        data.EmployeeName
        + "</span>"
        );
    }
    else {
        html = kendo.format(
        "<span class='text-danger'>Cancel</span>"
        );
    }
    return html;
}
</script>

有关更多信息,请查看如何在列客户机模板中使用条件逻辑?。希望这有助于。。。

尉迟越
2023-03-14

经过长期研究,我在本例中找到了解决方案:

使用级联DropDownList进行网格内联和弹出编辑

然而,这不仅仅是复制和粘贴,我仍然不知道为什么这个例子在官方FAQ Telerik页面上不可用,但我想提供关键点,以便做到这一点:

1) 您必须选择内嵌或弹出编辑模式:

.Editable(editable => editable.Mode(GridEditMode.InLine))

为什么?因为当您要编辑或添加行时:

2)接下来,网格中的新列将看起来像这样:

columns.Bound(b => b.CategoryID).ClientTemplate("#=Category.Name#");

注意,在我使用类作为Category而不是CategoryID之前,ID是关键点。

3) 您需要更改以前的方法,从向类添加提示到类的ID,例如:

非级联方法:

[UIHint("ClientStatus")]
public Statuses Status { get; set; }

public int StatusID { get; set; }

级联方法:

public Statuses Status { get; set; }

[UIHint("ClientStatus")]
public int StatusID { get; set; }

3) 级联方法中的编辑器模板应如下所示:

基本一:

@model int

@(Html.Kendo().DropDownListFor(m => m)
        .AutoBind(false)
        .DataValueField("CategoriesID")
        .DataTextField("Name")
        .DataSource(dataSource =>
        {
            dataSource.Read(read => read.Action("PopulateCategories", "FullView"))
            .ServerFiltering(true);
        })
)
@Html.ValidationMessageFor(m => m)

级联一级:

@model int

@(Html.Kendo().DropDownListFor(m => m)
        .AutoBind(false)
        .DataValueField("ID")
        .DataTextField("Name")
        .DataSource(dataSource =>
        {
            dataSource.Read(read => read.Action("PopulateStatuses", "FullView").Data("filterCategories"))
            .ServerFiltering(true);
        })
        .CascadeFrom("CategoriesID")
)
@Html.ValidationMessageFor(m => m)

4)级联调用一个JavaScript函数,如下所示:

function filterCategories() {
    return {
        categoriesID: $("#CategoriesID").data("kendoDropDownList").value()
    };
}

其中类别ID是第一个下拉列表的ID,它是在我们编辑或添加新行时生成的。

4) 最后,我们需要共享一个JSON:

第一个下拉:

public JsonResult PopulateCategories()
{
        return Json(CategoriesData.GetCategories(), JsonRequestBehavior.AllowGet);
}

第二个和更多下拉列表:

public JsonResult PopulateStatuses(int categoryID)
{
        return Json(StatusesData.GetStatuses(categoryID), JsonRequestBehavior.AllowGet);
}
 类似资料:
  • 在我的剑道网格中,我为每一列都有kenddropDownlist。选定的项目应解析并显示模板文本 我一直在遵循这个例子http://jsfiddle.net/jddevight/Ms3nn/ 使现代化 我在这里简化了我的问题http://jsfiddle.net/BlowMan/mf434/ 问题 当我在下拉列表中选择一个项目时,它不会返回所选项目的值。它返回null。 }); 下面的视图部分 任

  • 我有剑道网格,我需要在两个单元格中内联编辑两个下拉列表。第二个列表依赖于第一个列表。第二个可以有0个或X个项目。当秒为0时,如何在保存项目时向服务器发送空值? 网格如下所示: 操作编辑器模板: 当我单击“保存”时,我在请求中始终具有操作的默认值。谢谢你的帮助!

  • 我想把剑道下拉列表加入我的表格。一切都会好的,除了一件事。当我想用默认的剑道创建工具栏“添加记录”时,我不能绑定从dropdownlist数据源获取的第一个值。 数据源工作正常。DropDownlist也很好用。如果我手动从dropDownlist中选择任何东西,一切正常。 我也试过了。除了“索引”之外,我试图手动从数据源中选择第一项。从视觉上看,它工作得很好。即使选择了第三项,但当我单击“更新”

  • 我有一种情况,我有两个多选择剑道下拉列表,在第一个多选择下拉列表的选择上,我想填充另一个多选择下拉列表。 第一个多选剑道DD: 第2次MultiSelect剑道DD: JS代码: 我所尝试的: 我试图在函数onFirstDropDownChange中调用AJAX,但由于数据源没有绑定到第二个下拉列表,所以这不起作用。 限制条件: 首先,我不想在两个下拉列表中加载数据 第二个下拉列表的值取决于第一个

  • 我可以通过下面的模板场景将剑道下拉列表添加到剑道网格中: 然而,问题是如何访问dropdownlist以获取其值/文本/索引。到目前为止,我可以使用以下方法获取所选行数据: 这里是JSFiddle代码 请帮帮我,我卡住了。 提前感谢。

  • 如何在更改函数上选择剑道下拉列表值。剑道下拉列表在网格中。在更改函数中,我想选择列表中的第一项。 我已经编写了代码: 但是下拉列表没有选择更改功能。我该怎么做请帮帮我。