У меня проблема с привязкой данных к шаблону редактирования для сетки кендо. Я привязал свою сетку к модели, которая является DataTable (она должна быть DataTable, потому что все cloumns должны быть сгенерированы динамически - я не знаю схему), я добавил экспорт, сортировку, страницы и т. Д. Я также добавил кнопку редактирования и определил другую cshtml-файл с шаблоном редактирования. Все работает почти идеально. Одна из проблем заключается в том, что я получаю пустую модель для редактирования шаблона. Вид:Kendo grid изменить шаблон привязка данных - нет данных
@(Html.Kendo().Grid(Model.Data)
.Name("OpertionalViewGrid")
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Events(events => events.Error("error_handler"))
.Model(model =>
{
model.Id(p => p.Row[0]);
if (Model.Data != null)
{
foreach (System.Data.DataColumn column in Model.Data.Columns)
{
var field = model.Field(column.ColumnName, column.DataType);
}
}
})
.PageSize(20)
.Read(read =>
read.Action("Export_Read","OperationalView").Data("getRow"))
.Update(up => up.Action("UpdateRow", "OperationalView").Data("getRow"))
)
.Columns(c =>
{
if (Model.Data != null)
{
int index = 0;
foreach (System.Data.DataColumn column in Model.Data.Columns)
{
var col = c.Bound(column.ColumnName).Width("300px");
if (index < 2)
{
col.Locked(true).Lockable(false);
}
index++;
}
c.Command(command => { command.Edit();}).Width(100);
}
})
.Editable(editable => editable
.Mode(GridEditMode.PopUp)
.TemplateName("OperationalViewEditor")
)
.Scrollable()
.Reorderable(reorder => reorder.Columns(true))
.Resizable(r => r.Columns(true))
.Filterable(ftb => ftb.Mode(GridFilterMode.Row))
.HtmlAttributes(new { style = "height:100%" })
.Pageable()
.Navigatable()
.Sortable()
.Groupable(g => g.ShowFooter(true))
.ToolBar(tools => tools.Excel())
.Excel(excel => excel.AllPages(true))
.ToolBar(tools => tools.Pdf())
.Pdf(pdf => pdf
.AllPages()
.AvoidLinks()
.PaperSize("A4")
.Scale(0.8)
.Margin("2cm", "1cm", "1cm", "1cm")
.Landscape()
.RepeatHeaders()
.TemplateId("page-template")
.FileName("Export.pdf")
)
)
Я также свою GetRow функцию:
<scriprt>
function getRow()
{
var grid = $('#OpertionalViewGrid').data('kendoGrid');
var selectedItem = grid.dataItem(grid.select());
return selectedItem;
} </script>
В моем контроллере у меня есть:
public ActionResult Export_Read([DataSourceRequest]DataSourceRequest request)
{
var ovs = new OperationalViewService();
return Json(ovs.Read()/*.ToDataSourceResult(request)*/);
}
public ActionResult UpdateRow([DataSourceRequest] DataSourceRequest dsRequest, DataRowView row)
{
var t = 5;
return Json(row/*ModelState.ToDataSourceResult()*/);
}
И мой редактировать шаблон:
@model System.Data.DataRowView
<h3>Customized edit template</h3>
@if(Model == null)
{
<label> null</label>
}
else
{
<label> not null!!!!!!</label><br />
@Html.Label(Model.DataView.Table.Columns.Count.ToString())<br />
@Html.Label(Model.ToString())<br />
@Html.Label(Model.Row.Table.Columns.Count.ToString())<br />
}
@for (int i = 0; i < Model.DataView.Table.Columns.Count; i++)
{
@Html.LabelFor(model => model.DataView.Table.Columns[i].ColumnName.ToString())
@Html.LabelFor(model => model.Row[i].ToString())
<br />
}
Так .. когда я нажимаю Эд это кнопка, я получаю окно с правильным заголовком, с примечанием «не null! 0 DataRowView 0 " Итак, я пришел к выводу, что модель имеет правильный тип, одна из проблем заключается в передаче моей выбранной строки. Я очень новичок в сети и Kendo/telerik, поэтому мой вопрос: как отправить выбранную строку сетки для редактирования шаблона? Другой вопрос: почему, когда я нажимаю «редактировать», я не попадаю в действие UpdateRow в своем контроллере?
Является ли beacuse мои шаблоны редактора визуализируются rifht после загрузки страницы, когда ни одна строка не выбрана? – Kula