Grid into Grid Popup Editor - 在子网格中传递 ID 参数

Posted

技术标签:

【中文标题】Grid into Grid Popup Editor - 在子网格中传递 ID 参数【英文标题】:Grid into Grid Popup Editor - Passing ID parameter in sub grid 【发布时间】:2012-11-03 07:23:23 【问题描述】:

我有一个包含员工的网格。有一个编辑按钮,编辑模式设置为弹出。在我要编辑的实体的 EditorTemplate 中,有另一个网格具有 Salary 的历史记录,具有 incell 或 inline 编辑模式。

两个网格都使用 Ajax 数据源。问题在于内部网格绑定。将 Json 结果提供给 ajax 调用的控制器操作需要我们正在编辑的员工的 ID 以返回适当的薪水历史记录。但是,Kendo UI ASP.NET MVC 包装器会在知道我们要编辑哪个员工之前呈现某种编辑器模板,然后在我们请求弹出窗口时对其进行编辑。

如何在 Read Ajax 调用中提供员工 ID?

主网格

@(html.Kendo().Grid<MyProject.Business.Models.EmployeDTO>().Name("EmployeGrid")
.ToolBar(toolbar => toolbar.Create())
.Columns(cols =>

    cols.Bound(o => o.someData).Title("Some Data");
    cols.Bound(o => o.moreData).Title("More Data");
    cols.Command(o =>
    
            o.Edit();
        o.Destroy();
    ).Title("&nbsp;");
)
.Editable(editor => editor
    .Mode(GridEditMode.PopUp)
    .Window(window => window.Draggable().Resizable().HtmlAttributes(new  @style = "width:700px;" )))
.Sortable()
.Filterable()
.Groupable()
.DataSource(datasource => datasource
    .Ajax()
    .Model(model => model.Id(o => o.id))
    .Read(read => read.Action("GetAll", "EmployesAjax"))
    .Update(update => update.Action("Update", "EmployesAjax"))
    .Create(create => create.Action("Create", "EmployesAjax"))
    .Destroy(destroy => destroy.Action("Destroy", "EmployesAjax"))
    )
)

内部网格(在 Views/Shared/EditorTemplates/EmployeDTO.cshtml 中)

@Html.Kendo().Grid<MyProject.Business.Models.SalairyDTO>().Name("SalaryGrid")
.Columns(cols =>

    cols.Bound(o => o.someInfo).Title("Some Info");
)
.DataSource(datasource => datasource
    .Ajax()
    .Model(model =>
    
        model.Id(o => o.id);
        model.Field(o => o.employe_id).DefaultValue(Model.id);
    )

    // NEED THE ID HERE
    .Read(read => read.Action("GetByEmployeId", "SalairyAjax", new  id = "" ))

    .Update(update => update.Action("Update", "SalairyAjax"))
    .Create(create => create.Action("Create", "SalairyAjax"))
    .Destroy(destroy => destroy.Action("Destroy", "SalairyAjax"))));

【问题讨论】:

【参考方案1】:

基本上我建议您将内部网格的 AutoBind 选项设置为 false 并使用外部网格的编辑事件来执行读取请求并将值作为附加参数传递。

这是一个例子:

function onEditOfEmployeGrid(e)
    $('#SalaryGrid').data().kendoGrid.dataSource.read(id:e.model.EmployeeID)

【讨论】:

@Pluc 你能解决这个问题吗?我陷入了一个类似的问题,我可以将主网格中的 ID 读取到子网格中。但是,无法在我创建的 toolbar 按钮中读取相同的值。你能帮忙吗? @Sarah 通常你只使用#=Id# (Razor)。查看我提出问题的日期,那时我刚刚开始使用剑道。我不太确定为什么我没有使用这种语法。您不能将其用于默认值、过滤器或任何强类型,但对于路由数据,我相信您可以...无论哪种方式,这都是您想要在工具栏中使用的。如果您需要更多帮助,请随时使用示例开始您自己的问题!帮助会更容易:) @Pluc # 对我不起作用。我已经发布了我的问题here。介意看看吗?既然你已经做过类似的工作,你也许可以说我缺少什么?【参考方案2】:

您可以简单地使用网格中的 addtionaldata 参数从网格中传递值。然后可以使用 ViewData["RouteID"] 在网格弹出编辑器中引用(左侧)上的 RouteID。希望对你有帮助

     .Editable(editable => editable.Mode(GridEditMode.PopUp)
         .TemplateName("busStop")
         .DisplayDeleteConfirmation(true)
         .Window(window => window.Modal(true).Resizable().Draggable())
         .AdditionalViewData(new  RouteID = Model.RouteID ))

【讨论】:

以上是关于Grid into Grid Popup Editor - 在子网格中传递 ID 参数的主要内容,如果未能解决你的问题,请参考以下文章

Kendo Grid:将Edit button 移到grid view 得顶部

避免在 Grid Edit 行编辑中显示 ValueField

Kendo Grid - 从弹出窗口编辑后刷新行

Kendo Grid Edit Bootstrap 类和 Textbox 自动对焦与 EditorTemplate 不起作用

delphi 如何实现grid组件在鼠标双击某一行后获得这一行的数据并将数据写到相应的edit中?

◆◆0REUSE_ALV_GRID_DISPLAY_LVC-可编辑单元格