使用带有ajax表单的自定义窗口添加新的网格行

时间:2019-04-25 13:46:51

标签: kendo-ui kendo-grid kendo-asp.net-mvc kendo-window

我需要创建一种将新元素添加到剑道网格的更高级的方法,因此简而言之,我已经复制了以下示例,因为它完全满足了我的需要: https://github.com/telerik/ui-for-aspnet-mvc-examples/tree/master/window/KendoWindow-Ajax-Form

它工作正常。唯一的不同是,新行是在网格的正确位置添加的,而不是通常的顶部。如何使用链接到的示例将新行放在顶部?

(我认为没有必要在这里显示我的代码,因为它非常类似于上面链接中给出的代码)

2 个答案:

答案 0 :(得分:0)

因此,如果您想在顶部添加一行,我想您可以使用自定义模板。我可能不太清楚您在做什么,但是,我会尽力帮助您。 这是代码中的网格:

     @(Html.Kendo().Grid<OrderViewModel>()

                    .Name("grid")
                    .Columns(columns =>
                     {
                      columns.Bound(c => c.Message).EditorTemplateName("MessageEditor");
                     }
                    .DataSource(datasource => datasource

                        .Ajax()

                        .Read(read => read.Action("GetOrders", "OrdersData"))



                )

                )`

然后编写如下模板:

<script type="text/x-kendo-template" id="MessageEditor">
    <div class="k-header k-grid-toolbar">

        <div style="display: inline-block; font-size:1.25em; padding: 
        </div>
    </div>

</script>

这可能不是最好的解决方案,但这是我知道的在Kendo网格中创建自定义列的唯一方法

答案 1 :(得分:0)

最终自己找到了解决方案。按照我在原始帖子中创建的链接中的示例进行操作,这是我所做的: 首先,当创建新的“订单”时,我确保在OrdersDataController的“ Create”方法中返回的模型具有将模型添加到数据库时的ID。 因此,当此部分在“ _OrdersCreate.cshtml”中执行时:

@if (Model != null && ViewData.ModelState.IsValid)
{
    <script>
        closeCreatePopup();
    </script>
}

我发送有关创建的新订单的信息。为此,我修改了“ closeCreatePopup()”以处理参数。 因此,对于最终结果,我将仅使用自己项目中的一段代码,以下是我对“ closeCreatePopup()”的实现:

function closeCreateEmployeeWindow(name, rHPersonID, personID, organizationID) {
    if (name !== undefined
        && rHPersonID !== undefined
        && personID !== undefined
        && organizationID !== undefined) {

        var grid = $("#grid").data("kendoGrid");
        grid.dataSource.insert({ Name: name, RHPersonID: rHPersonID, PersonID: personID, OrganizationID: organizationID });
        grid.dataSource.sync();
    }

    var wnd = $("#createEmployeeModal").data("kendoWindow");
    wnd.refresh({ url: '@Url.Action("CreateEmployee", "Employee", new { Area = "Administration" })' });
    wnd.close();
}

重要的是:

var grid = $("#grid").data("kendoGrid");
grid.dataSource.insert({ Name: name, RHPersonID: rHPersonID, PersonID: personID, OrganizationID: organizationID });
grid.dataSource.sync();

这里发生的事情是我使用网格中的“插入”方法,并添加了一个新对象。 “插入”将新对象插入到网格的最顶部。请记住紧接在之后调用“ sync”方法。

通过这样做,复制了内置在网格中的常规“创建”方法。