これがGridEditMode.InCellに対して行ったことです。クライアントとファンドがあり、各クライアントには独自のファンドのリストがあるため、ユーザーがクライアントを選択するときに、このクライアントに固有のファンドのみを表示する必要があります。
表示:剣道グリッド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"))
これで、ユーザーが[資金]をクリックすると、資金のデータソースのフィルタリングを実行する必要があります。これは、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の名前と一致していることを確認してください。私の場合、EditorTemplateおよびFundForeighKeyEditor.cshtmlファイルとして「FundForeignKeyEditor」を使用しました
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; }
}