这是我为 GridEditMode.InCell 所做的。我有客户和基金,每个客户都有自己的基金列表,所以当用户选择客户时,我只需要显示特定于该客户的基金
查看:Kendo Grid UI 设置
c.ForeignKey(p => p.ClientId, Model.Clients, "Id", "ClientName")
.Title("Client")
.Width(100);
c.ForeignKey(p => p.FundId, Model.Funds, "Id", "Description")
.EditorViewData(new {funds = Model.Funds})
.EditorTemplateName("FundForeignKeyEditor")
.Title("Fund")
.Width(100);
})
.Editable(x => x.Mode(GridEditMode.InCell))
.Events(e => e.Edit("gridEdit"))
现在,当用户单击 Fund 时,您需要对资金的数据源进行过滤,您可以使用 JavaScript 在“gridEdit”事件上执行此操作。您将此代码放在与上面的代码相同的视图/文件中
<script type="text/javascript">
function gridEdit(e) {
var fundDropDown = e.container.find("#FundId").data("kendoDropDownList");
if (fundDropDown) {
fundDropDown.dataSource.filter({ field: "ClientId", operator: "eq", value: e.model.ClientId });
</script>
Fund 具有“FundForeighKeyEditor”编辑器模板,您必须将其添加到 Views\Shares\EditorTemplate 文件夹中。您可以使用任何名称,只需确保文件模板的名称与 EditorTemplateName 的名称匹配。就我而言,我使用“FundForeignKeyEditor”作为 EditorTemplate 和 FundForeighKeyEditor.cshtml 文件
FundForeighKeyEditor.cshtml
@model FundViewModel
@(
Html.Kendo().DropDownListFor(m => m)
.BindTo((System.Collections.IEnumerable)ViewData["funds"])
.DataTextField("Description")
.DataValueField("Id")
)
这是一个 FundViewModel,它包含 ClientId,因此我可以对其执行过滤
public class FundViewModel
{
public string Id { get; set; }
public string ClientId { get; set; }
public string Description { get; set; }
}