【问题标题】:Getting the value of a column in a child grid in a kendo grid hierarchy获取剑道网格层次结构中子网格中列的值
【发布时间】:2014-03-07 20:54:42
【问题描述】:

我有一个 Kendo 网格层次结构,想知道如何获取子网格中列的值,以便我可以将该值传递给控制器​​中的函数。父网格中的数据是从一个作为报价条目的 db 表中提取的,而子网格是从另一个包含报价行项目版本的表中提取的。在子网格中,我单击编辑按钮将值传递给控制器​​。我收到一条错误消息,说 VersionID 未定义。如何从子网格中的 VersionID 列中获取值?

这是父网格的代码:

@(Html.Kendo().Grid<myWilmer.Models.QuotesSearchViewModel>()
            .Name("quotesSearchGrid")
            .Columns(columns =>
            {
                columns.Bound(c => c.AccountNumber);
                columns.Bound(c => c.QuoteNumber);
                columns.Bound(c => c.CustomerName);
                columns.Template(c => { }).ClientTemplate(
                    Html.ActionLink("Create Version", "CreateQuoteVersion", new { id = "#= QuoteNumber #" }, new { @class = "k-button" }).ToHtmlString());
            })
            .ToolBar(toolbar => toolbar.Custom().Text("Create New Quote").Action("Index", "Quotes"))
            .Selectable(selectable => selectable
                    .Mode(GridSelectionMode.Single))
            .Sortable()
            .ClientDetailTemplateId("template")
            .Events(events => events.DataBound("onDataBound"))
            .Pageable(pageable => pageable
                .ButtonCount(5)
                .PageSizes(new int[] { 10, 20, 30 }))
            .Navigatable()
            .DataSource(dataSource => dataSource
                .Ajax()
                .PageSize(10)
                .Model(model => 
                {
                    model.Id(m => m.QuoteNumber);
                    model.Field(m => m.AccountNumber).Editable(false);
                    model.Field(m => m.QuoteNumber).Editable(false);
                    model.Field(m => m.CustomerName).Editable(false); 
                })
                .Read(read => read.Action("Quotes_Read", "Quotes").Data("filters"))
                .Events(e => e.Error("ShowAjaxError"))
                .Create(update => update.Action("EditingInline_Create", "Quotes"))
            )
)

这是子网格的代码:

<script id="template" type="text/kendo-templ">
    @(Html.Kendo().Grid<myWilmer.Models.QuoteVersionViewModel>()
        .Name("quoteDetailsGrid_#=QuoteNumber#")
        .Columns(columns =>
        {
            columns.Bound(c => c.VersionID);
            columns.Bound(c => c.JobType);
            columns.Bound(c => c.ProductType);
            columns.Bound(c => c.RepName);
            columns.Bound(c => c.TimeIn).Format("{0:hh:mm:ss tt}");
            columns.Bound(c => c.DateIn).Format("{0:MM/dd/yyyy}");
            columns.Template(c => { }).ClientTemplate(
                    Html.ActionLink("Edit", "Edit", new { id = "#= QuoteNumber #", itemID = "#= VersionID #" }, new { @class = "k-button" }).ToHtmlString());
        })
        .DataSource(dataSource => dataSource
            .Ajax()
            .PageSize(5)
            .Read(read => read.Action("Versions_Read", "Quotes", new { quoteNumber = "#=QuoteNumber#" }))
            .Model(model => {
                model.Id(m => m.VersionID);
                model.Field(m => m.VersionID).Editable(false);
                model.Field(m => m.JobType).Editable(false);
                model.Field(m => m.ProductType).Editable(false);
                model.Field(m => m.RepName).Editable(false);
                model.Field(m => m.TimeIn).Editable(false);
                model.Field(m => m.DateIn).Editable(false);
            })
        )
        .Pageable(pageable => pageable
            .ButtonCount(5)
            .PageSizes(new int[] { 10, 20, 30 }))
        .Sortable()
        .ToClientTemplate()
   )

这里是控制器方法

public ActionResult Edit(string id, int itemID)
{
     //Functionality
}

提前致谢 - 肖恩

【问题讨论】:

    标签: model-view-controller kendo-grid kendo-asp.net-mvc


    【解决方案1】:

    你应该使用:

    \\#= VersionID\\#
    

    在子网格中。

    【讨论】:

    • 您好Roti,很抱歉长时间延迟回复。我们无法让它工作,但是这里有一个解决方案让我们得到了我们正在寻找的结果:当我们创建视图模型时,我们添加了一个名为“EditButton”的新属性,它是一个字符串,我们创建了一个用于创建按钮和属性的 HTML 字符串。我会提供代码。
    • 我不断收到错误消息,指出我的子网格中未定义属性,但这有效。谢谢!你让我头疼不已。你必须逃避他们自己的语法是愚蠢的,因为它在一个子控件中,但它有效。
    【解决方案2】:

    这是我们想出的解决方案。在视图模型中,我们创建了一个名为“EditButton”的属性并将其设置为带有 HTML 标记的字符串:

    QuoteVersionViewModel qvvm = new QuoteVersionViewModel()
                    {
                        QuoteNumber = deet.QuoteNum,
                        VersionID = deet.VersionID,
                        ProductType = deet.ProductType,
                        JobType = deet.JobType,
                        RepName = deet.RepName,
                        TimeIn = deet.TimeIn,
                        DateIn = deet.DateIn,
                        EditButton = "<a href='" +u.Action("Edit", "Quotes", new { id = deet.QuoteNum, versionID = deet.VersionID }) + "' class='k-button'>Edit</a>"
                    };
    

    我们的剑道网格列如下所示:

    .Columns(columns =>
            {
                columns.Bound(c => c.QuoteNumber);
                columns.Bound(c => c.VersionID);
                columns.Bound(c => c.JobType);
                columns.Bound(c => c.ProductType);
                columns.Bound(c => c.RepName);
                columns.Bound(c => c.TimeIn).Format("{0:hh:mm:ss tt}");
                columns.Bound(c => c.DateIn).Format("{0:MM/dd/yyyy}");
                columns.Bound(c => c.EditButton).Encoded(false);
            })
    

    【讨论】:

      猜你喜欢
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      相关资源
      最近更新 更多