2

Kendo MVC コントロールを使用して、MVC .Net Framework v4.5 サイトに取り組んでいます。ページの 1 つは、ビュー モデルにバインドされている Kendo グリッドを使用します。行を編集すると、ドロップダウンリストコントロールを使用するフィールドがあり、選択が変更されると、行の残りのフィールドを更新して、新しく選択したアイテムを反映する必要があります..JSON呼び出しでこれを行っています.その行に使用する新しいビュー モデルを返します。ただし、その JSON 呼び出しから返されたデータを使用するようにグリッドに指示する方法がわかりません。何か案は?

編集:

私はいくつかのコードを添付しました。ここでの問題は、グリッドのデータソースを「更新」できることですが、UpdateGridSource jscript 関数の grid.dataSource.read() 行で、グリッドが編集モードから外れており、編集しようとすると行、データは元の状態に戻されます

(見る)

    @(Html.Kendo().Grid<RedFile.Models.QuickQuoteItemView>()
      .Name("QuoteItems")
      .Columns(c =>
      {
        c.Bound(p => p.Id).Hidden();
        c.Bound(p => p.Description).EditorTemplateName("Combobox");
        c.Bound(p => p.ItemQty);
        c.Bound(p => p.ItemPrice).Format("{0:c}");
        c.Bound(p => p.Total).ClientTemplate("#= kendo.format('{0:c}', Total)   #").FooterHtmlAttributes(new { style = "text-align:right;" }).ClientFooterTemplate("#= kendo.format('{0:c}', sum)#").HtmlAttributes(new { style = "text-align:right;" }).Width(100);
        c.Command(cmd => { cmd.Edit(); cmd.Destroy(); }).Title("Commands").Width(200);
      })
      .ToolBar(tb => tb.Create())
      .ClientDetailTemplateId("subitems")
      .Editable(eb => eb.Mode(GridEditMode.InLine).CreateAt(GridInsertRowPosition.Bottom))
      .Events(e=>e.Edit("editGrid"))
      .Scrollable()
      .DataSource(ds => ds
        .Ajax()
        .ServerOperation(false)
        .Aggregates(a =>
        {
            a.Add(p => p.LineTotal).Sum();
            a.Add(p => p.Total).Sum();

        })
       .Model(model =>
       {
            model.Id(p => p.Id);
            model.Field(p => p.LineTotal).Editable(false);
            model.Field(p => p.ItemPrice).Editable(true);
       })
      .Read(read => read.Action("GridSelect", "QuickQuote", new { qqid = Model.Id })).ServerOperation(false)
      .Create(create => create.Action("GridCreate", "QuickQuote", new { qqid = Model.Id }))
      .Update(update => update.Action("GridUpdate", "QuickQuote"))
      .Destroy(destroy => destroy.Action("GridDelete", "QuickQuote"))
      )
    )

    <script type="text/javascript">

    function dropDownSelectionChanged(e) {
      var dataItem = this.dataItem(e.item.index());
      UpdateGridSource(dataItem.Value);
    }

    function UpdateGridSource(DropDownValue) {
      var grid = $("#theGrid").data("kendoGrid");
      grid.dataSource.transport.options.read.url = '/Controller/refreshGridDataSource?selection=' + DropDownValue;
      grid.dataSource.read();
    }

    </script>

(コントローラ)

    public JsonResult refreshQuickQuoteTest2([DataSourceRequest] DataSourceRequest request, string selection)
    {
        QuickQuoteItem qqi = db.QuickQuoteItems.FirstOrDefault(p => p.ItemID == selection);

        QuickQuote quickQuoteOriginal = qqi.QuickQuote;

        QuickQuoteItemView qqiv = new QuickQuoteItemView();
        IEnumerable<QuickQuoteItemView> return2;

        qqiv.Id = qqi.Id;
        qqiv.ItemID = qqi.ItemID;
        qqiv.ItemPrice = qqi.ItemPrice;

        if (Session["quickQuote"] != null)
        {
            QuickQuote qq = (QuickQuote)(Session["quickQuote"]);

            if (Session["editingQuickQuoteId"] != null)
            {
                int row = Convert.ToInt32(Session["editingQuickQuoteId"]);
                foreach (var item in qq.QuickQuoteItems)
                {
                    if (item.Id == row)
                    {
                        QuickQuoteItem test = new QuickQuoteItem();
                        StandardItem stdItem = new StandardItem();
                        stdItem = db.StandardItems.Find(selection);
                        item.ItemPrice = stdItem.Price;
                        item.Description = stdItem.Description;
                        item.ItemID = stdItem.ItemId;
                    }
                }
            }                

            return2 = QuickQuoteItemViewItems(qq);
        }
        else
        {
            return2 = QuickQuoteItemViewItems(quickQuoteOriginal);
        }

        return Json(return2.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
    }
4

1 に答える 1