Как установить значение ячейки при встроенном редактировании в сетке Kendo MVC на основе выбора раскрывающегося списка? - PullRequest
0 голосов
/ 05 мая 2020

Надеюсь, название имеет смысл. Итак, у меня есть сетка всего с тремя столбцами, идея заключается в том, что при добавлении новой строки первый столбец представляет собой раскрывающийся список для сложного типа, и я хочу, чтобы второй столбец отображал значение из раскрывающегося списка динамически, а третий столбец - это просто текстовое поле. Я прочитал несколько других сообщений здесь и на собственном форуме Telerik, и на самом деле ни одно решение не работает. Может и есть, просто не обновляет вид. Было бы неплохо, если бы это было так же просто, как каскадирование нескольких раскрывающихся списков, вместо этого просто каскадирование в текстовое поле.

Вот сетка, она довольно стандартная:

@model Guid 
@(Html.Kendo().Grid<ConfigurationParameterSelectorViewModel>()
    .Name("configurationParameterSelectorGrid_" + Model)
    .ToolBar(t =>
    {
        t.Create().Text(GetText(Constant.ADD, Constant.TEXT_GLOBAL));
    })
    .Columns(columns => {
        columns.Bound(c => c.Id).Visible(false);
        columns.Bound(c => c.ConfigurationKey).ClientTemplate("#=ConfigurationKey.Text#");
        columns.Bound(c => c.DefaultValue);
        columns.Bound(c => c.CurrentValue);
    })
    .DataSource(dataBinding => dataBinding
        .Ajax()
        .PageSize(20)
        .Model(model =>
        {
            model.Id(c => c.Id);
            model.Field(e => e.ConfigurationKey).DefaultValue(new CheckBoxItem());
            model.Field(f => f.DefaultValue).Editable(false);
        })
        .Read(read => read.Action("GetConfigurationParametersSelector", "ConfigurationParameter", new { OrgSiteZoneId = Model }))
        .Create(create => create.Action("AddConfigurationParameterToSite", "ConfigurationParameter", new { OrgSiteZoneId = Model }))
    )
    .Filterable()
    .Navigatable()
    .Scrollable(s => s.Height("auto"))
    .DefaultGridSettings()
)

Модель, используемая в grid, это свойство DefaultValue, которое я хочу обновлять динамически на основе свойства из модели раскрывающегося списка:

public class ConfigurationParameterSelectorViewModel
{
    public ConfigurationParameterSelectorViewModel(){ }

    [ScaffoldColumn(false)]
    public int Id { get; set; }
    [UIHint("ConfigurationParametersDropDownEditor")]
    public CheckBoxItem ConfigurationKey { get; set; } // CheckBoxItem model is just used temporarily
    //[Editable(false)]
    public string DefaultValue { get; set; }
    public string CurrentValue { get; set; }
}

Редактор раскрывающегося списка:

@(Html.Kendo().DropDownListFor(m => m)
    .DataValueField("Value")
    .DataTextField("Text")
    .DataSource(source => source
        .Custom()
        .Transport(transport => transport
            .Read(read =>
            {
                read.Action("GetConfigurationParametersForDropDown", "ConfigurationParameter", new { Area = "Setup" });
            })
        )
    .ServerFiltering(true))
    .AutoWidth(true)
    .Events(e => e.Select("onConfigurationParametersEditorSelect")) )

и, наконец, javascript где я пытаюсь взять значение из выбранного элемента в раскрывающемся списке и обновить свойство DefualtValue в модели:

function onConfigurationParametersEditorSelect(e) {
            var grid = e.sender.element.closest(".k-grid").data("kendoGrid");
            var row = e.sender.element.closest("tr");
            var dataItem = grid.dataItem(row);
            dataItem.DefaultValue = "this should be a value from the dropdownlist";
        }

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 05 мая 2020

Вы можете использовать метод Set сетки Kendo:

function onConfigurationParametersEditorSelect(e)
{
    var dropDownDataItem = e.dataItem;
    var currentRowDataItem = $("#gridId").data("kendoGrid").dataItem(this.wrapper.parents('tr'));
    currentRowDataItem.set("DefaultValue", dropDownDataItem.Text);
    currentRowDataItem.ConfigurationKey.set("Text", dropDownDataItem.Text);                                                    
    currentRowDataItem.ConfigurationKey.set("Value", dropDownDataItem.Value);
}

Вот пример: Sample Dojo

...