В этом примере ниже, что мне нужно сделать с моим дочерним элементом, это передать список объектов контроллеру для проверок, поэтому я перебираю свои строки, получаю дочернюю сетку, а затем получаю дочерний элемент моей сетки изатем цикл по этим строкам, а затем добавление их в массив
Это хорошо работает для меня и того, что мне нужно, и используется во многих местах.
Если вам нужна дополнительная помощь, отредактируйте ваш вопрос и дайте мне знать, что вам нужно
Это моя сетка с дочерней сеткой
@(Html.Kendo().Grid<OrderLineViewModel>()
.Name("DispatchedGrid")
.Columns(columns =>
{
columns.Bound(e => e.OrderLineID).Visible(false);
columns.Bound(e => e.OrderDispatchID).Visible(false);
columns.Bound(o => o.OrderLineDispatchID).Visible(false);
columns.Bound(e => e.OrderLineNo);
columns.Bound(e => e.ProductCode);
columns.Bound(e => e.ProductItemNumber);
columns.Bound(e => e.ProductDescription);
columns.Bound(e => e.Quantity);
}).NoRecords("Blank Dispatch - Back Order")
.AutoBind(false)
.ClientDetailTemplateId("template")
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(6)
.Read(read => read.Action("GetOrderLines", "Dispatch"))
)
.Events(events => events.DataBound("fe_dispatch.dataBoundDispatch"))
)
<script id="template" type="text/kendo-tmpl">
@(Html.Kendo().Grid<OrderLineDispatchViewModel>()
.Name("grid_#=OrderLineID#") // template expression, to be evaluated in the master context
.Columns(columns =>
{
columns.Bound(o => o.OrderID).Visible(false);
columns.Bound(o => o.OrderLineID).Visible(false);
columns.Bound(o => o.BoxQuantity).Visible(false);
columns.Bound(o => o.LotNumber).Width(200);
columns.Bound(o => o.InventoryQuantity);
columns.Bound(o => o.Bin).Width(200);
columns.Bound(o => o.DispatchedQuantity).Width(100); // If Qty = 0 then need to have a spinner here that will allow for bin selection.
})
.Editable(m => m.Mode(GridEditMode.InCell).DisplayDeleteConfirmation(false))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.Read(read => read.Action("GetOrderDispatchLines", "Dispatch", new { orderLineId = "#=OrderLineID#", dispatchId = "#=OrderDispatchID#" }))
.Model(model =>
{
model.Id(l => l.OrderLineID);
model.Field(p => p.DispatchedQuantity).Editable(true);
model.Field(p => p.LotNumber).Editable(false);
model.Field(p => p.InventoryQuantity).Editable(false);
model.Field(p => p.Bin).Editable(false);
})
)
.ToClientTemplate())
Тогда в TypeScript за этим находится то, что внутри моего метода (обрезано для того, что вам нужно)
var parentGrid: kendo.ui.Grid = $("#DispatchGrid").data("kendoGrid") as any;
var gridDataRow = parentGrid.dataSource.data();
$.each(gridDataRow,
(index, pItem) => {
var childGrid: kendo.ui.Grid = $("#grid_" + pItem.OrderLineID).data("kendoGrid") as any;
$.each(childGrid.dataSource.data(),
(index, cItem) => {
if (cItem.DispatchQuantity < 0) {
console.log(cItem);
dispatchItems.push({
OrderID: pItem.OrderID,
PickId: pickId,
OrderLineID: pItem.OrderLineID,
OrderLineNo: pItem.OrderLineNo,
ProductCode: pItem.ProductCode,
BoxQuantity: pItem.BoxQuantity,
ProductItemNumber: pItem.ProductItemNumber,
Description: pItem.ProductDescription,
LotNumber: cItem.LotNumber,
InventoryQuantity: cItem.InventoryQuantity,
Bin: cItem.Bin,
Quantity: cItem.DispatchQuantity,
});
});
});