Не удается получить динамический выпадающий список для работы в строке сетки Kendo - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь ограничить раскрывающиеся списки в моей сетке кендо, чтобы они содержали только те продукты, которые были ранее сопоставлены с компанией, выбранной в другой ячейке в строке.

Я использовал динамический редактор раскрывающихся списковшаблонный подход.

Однако идентификатор, переданный getCompanyId (), всегда равен нулю, и поэтому мои выпадающие списки всегда равны нулю.

Представление:

@(Html.Kendo().Grid<XXXAppXXX.Models.WeeklyRailPlan>()
      .Name("grid")
      .Columns(columns =>
      {
          columns.Bound(c => c.WeekNumber);
          columns.Bound(c => c.Company).ClientTemplate("#=(data.Company) ? Company.Name : 'Select Company...'#");
          columns.Bound(c => c.ServiceCode);
          columns.Bound(o => o.Product)
            .ClientTemplate("#= (data.Product) ? Product.Name : 'Select Product'#")
            .EditorTemplateName("DynamicDropDownList");
   //etc
      })
      .ToolBar(toolbar => {
          toolbar.Create();
          toolbar.Save();
      })
      .Editable(editable => editable.Mode(GridEditMode.InCell))
      .Pageable()
      .Filterable()
      .Events(ev => ev
             .Remove(@"function(e){setTimeout(function(){$('#grid').data('kendoGrid').dataSource.sync()})}")
                            )
      .Sortable(sortable => {
          sortable.SortMode(GridSortMode.SingleColumn);
      })

      .Filterable()
      .DataSource(dataSource => dataSource
          .Ajax()
          .Events(events => events.Error("error_handler"))
          .Sort(p => { p.Add("WeekNumber").Descending(); })
          .Model(model => model.Id(p => p.ID))
          .Read(read => read.Action("WeeklyRailPlans_Read", "WeeklyRailPlanGrid"))
          .Create(create => create.Action("WeeklyRailPlans_Create", "WeeklyRailPlanGrid"))
          .Update(update => update.Action("WeeklyRailPlans_Update", "WeeklyRailPlanGrid"))
          .Destroy(destroy => destroy.Action("WeeklyRailPlans_Destroy", "WeeklyRailPlanGrid"))
      )
)

EditorTemplate с именем DynamicDropDownList.cshtml

<script type="text/javascript">
    function getCompanyId() {
        return { CompanyID: '#=ID#' };
    }
</script>


@(Html.Kendo().DropDownList()
                .Name("Product")
                .DataValueField("ID")
                .DataTextField("Name")
                .DataSource(ds => ds
                    .Read(read => read.Action("GetProductsForCompany", "Products").Data("getCompanyId")))
)    

Метод контроллера GetProductsForCompany (всегда принимает значение NULL)

        public ActionResult GetProductsForCompany(int CompanyID)
        {
            return Json(db.Products.Where(e => e.Companies.Any(t =>t.ID == CompanyID)), JsonRequestBehavior.AllowGet);
        }

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

Я использую такой код:

<script type="text/javascript">
    function getCompanyId() {
        var gview = $('#grid').data("kendoGrid");
        var selectedItem = gview.dataItem(gview.select());
        return { CompanyID: selectedItem.ID };
    }
</script>
0 голосов
/ 08 апреля 2019

Требуется решение:

function getCompanyId() {
    var grid = $('#grid').data('kendoGrid');
    var dataItem = grid.dataItem(grid.table.find('.k-edit-cell').parents('tr'))
    return { CompanyID: dataItem.Company.ID };
}
...