Встроенный комбинированный список Kendo Grid без изменения значения - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть сетка кендо mvc со встроенным изданием. Я хочу редактировать свои значения в сетке, но когда я нажимаю на поле со списком и меняю его. Это не меняет значение строки, возвращает старое существующее значение

Как я могу решить эту проблему?

Здесь моя сетка и шаблон

    @(Html.Kendo().Grid<MockUpForeNet.Controllers.CardDetailController.Limits>()
        .Name("limitgrid").AutoBind(true)
        .DataSource(dataBinding => dataBinding.Ajax()
        .Read("GridLimitBinding", "CardDetail",new { rule = rule }).Update("UpdateLimit", "Transaction")
        .Model(keys =>
        {
            keys.Id(c => c.Id);
            keys.Field(c => c.Id).Editable(false);
            keys.Field("DurationType", typeof(string)).Editable(true);
            keys.Field("DurationValue", typeof(string)).Editable(true);
            keys.Field("ValueType", typeof(string)).Editable(true);
            keys.Field("MaxValue", typeof(string)).Editable(true);

        }).Batch(true).ServerOperation(false)
        )
        .Events(e => e.DataBound("hidecolumn1"))
        .Editable(editing => editing.Mode(Kendo.Mvc.UI.GridEditMode.InCell))
        .ToolBar(commands =>
        {
            commands.Create().Text(" ");
            commands.Save().SaveText(" ").CancelText(" ");
        })
        .Columns(columns =>
        {
            columns.Bound(e => e.MaxValue).Width(200).Title("Limit").ClientTemplate("#= ValueType == 'Amount' ? Row(MaxValue) : RowLiters(MaxValue) #");
            columns.Bound(e => e.ValueType).Width(200).Title("Type").EditorTemplateName("ValueType");
            columns.Bound(e => e.DurationValue).Width(200).Title("Duration");
            columns.Bound(e => e.DurationType).Width(200).Title("Duration Type").EditorTemplateName("DurationType");
            columns.Bound(e => e.Id).Visible(false);
            columns.Bound(e => e.Id).Width(80).ClientTemplate("<img src='../../assets/images/icons/delete.svg' id='#=Id#' />").Filterable(false).IncludeInMenu(false).Title(" ");
        })
        //.Selectable()
        .Sortable()
        .Navigatable(configurator => configurator.Enabled(true))



         ///My template
          @(Html.Kendo().ComboBox()
                .Name("cbvaltype").ValuePrimitive(true)
                .Items(i =>
                {
                    i.Add().Text("Quantity").Value("Quantity");
                    i.Add().Text("Amount").Value("Amount");
                })
            )

1 Ответ

0 голосов
/ 26 февраля 2020

Лично я бы создал comboBox в кендо следующим образом:

Столбец, в котором находится поле со списком (здесь ничего не изменилось):

columns.Bound(e => e.ValueType).Width(200).Title("Type").EditorTemplateName("ValueType");

Шаблон:

@model // The model of the comboBox (Which as I have stated below should be `ValueType`)

        @(Html.Kendo().ComboBoxFor(m => m)
            .HtmlAttributes(new {data_skip = "true", data_bind = "defferedValue: ValueType"})
            .PlaceHolder("Select a value")
            .DataSource(source => 
            {
                source.Read("GetValues", "//Controller").ServerFiltering();
            })
            .MinLength(3)
            .AutoBind(false)
            .Filter(FilterType.Contains)
            .DataValueField("ValueID")
            .DataTextField("ValueText")
        )

Контроллер:

public ActionResult GetValues(string text)
{
    List<ValueModel> valueList = new List<ValueModel>();

    if(!string.IsNullOrWhiteSpace(text)){
        valueList = //Get a list of values which you want to be in this list (ie what you want to show in the comboBox)

        // Above you should also do some LINQ to query against the list and get the correct values (ie .Where(x => x.ToLower().Contains(text.ToLower())).ToList())
    }

    return Json(valueList, JsonRequestBehaviour.AllowGet)
}

Итак, что мы делаем выше?

Я изменил шаблон для принятия класса модели, и мы отредактировали comboBox из ComboBox для ComboBoxFor. При этом используется модель, переданная в представление.

        .DataValueField("ValueID")
        .DataTextField("ValueText")

По сути, это идентификатор и текст comboxBox.

ПРИМЕЧАНИЕ. Я полагаю, что если нет, вам следует изменить переменную ValueType быть классом с именем ValueType или любым другим, и этот класс должен быть определен следующим образом:

public class ValueType
{
    public int ValueID{get;set;}
    public string ValueText{get;set;}
}

MinLength(3) указывает, что пользователю необходимо ввести не менее 3 символов, чтобы начать поиск comboBox .

Мы вызываем метод контроллера GetValues, который принимает параметр text, и здесь мы проверяем, чтобы убедиться, что text не является нулевым или пустым, а затем возвращаем значения из списка ValueType Здесь Valuetext ToLower () содержит текст, переданный в функцию.

Затем мы возвращаем его в шаблон, который затем устанавливает значение в сетке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...