これらの列の1つがforeignKey列であるいくつかの列を持つグリッドがあります。
その列のすべての可能な値をコンボボックスに表示したいと思います。State にはViewData["States"]
フィールドとフィールドがあります。IList<State>
Id
Name
それを実現するために、テンプレート「GridForeignKey.cshtml」を次のように変更しました。
@model object
@(
Html.Kendo().ComboBoxFor(m => m)
.BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") +
"_Data"]).Filter(FilterType.Contains).Placeholder("Select...")
)
私のビューは次のようになります。
<div class="contentwrapper">
@{
ViewBag.Title = "Home Page";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@(
Html.Kendo().Grid<CustomerModel>()
.Name("Grid")
.Columns(columns => {
columns.Bound(p => p.Name);
columns.ForeignKey(p => p.StateId, (IEnumerable)ViewData["States"], "Id", "Name");
columns.Bound(p => p.StreetAddress).Width(140);
columns.Bound(p => p.Zip).EditorTemplateName("Integer");
columns.Command(command => { command.Edit(); command.Destroy(); });//edit and delete buttons
})
.ToolBar(toolbar => toolbar.Create())//add button
.Editable(editable => editable.Mode(GridEditMode.InLine))//inline edit
.Pageable()
.Sortable()
.Scrollable()
.Filterable()
.DataSource(dataSource => dataSource
.Ajax()
.Events(events => events.Error("error_handler"))
.Model(model => {
model.Id(c => c.CustomerId);
model.Field(c => c.CustomerId).Editable(false);
model.Field(c => c.Zip).DefaultValue(4444);
}
)//id of customer
.Create(update => update.Action("EditingInline_Create", "Customer"))
.Read(read => read.Action("EditingInline_Read", "Customer"))
.Update(update => update.Action("EditingInline_Update", "Customer"))
.Destroy(update => update.Action("EditingInline_Destroy", "Customer"))
)
)
</div>
<script type="text/javascript">
function error_handler(e) {
if (e.errors) {
var message = "Errors:\n";
$.e`enter code here`ach(e.errors, function (key, value) {
if ('errors' in value) {
$.each(value.errors, function () {
message += this + "\n";
});
}
});
alert(message);//show error
}
}
</script>
今私の問題:
- 私のテーブルには、「状態」の選択された値が表示されません。
- 行を編集すると、コンボボックスが表示され、目的の値がすべて含まれていますが、値が選択されていません。代わりに、常にプレースホルダー テキストが表示されます。
- 複雑なオブジェクトをグリッドにバインドする前に、それ自体が複合型 (および属性
State
を含む) であるフィールドを持っていましたが、どういうわけか剣道では のようにバインドできませんでした。そのため、モデルをフラット化し、代わりにフィールドを使用しています。このようなカスケードされた複合型を使用することさえ可能ですか?Id
Name
p => p.State.Id
StateId