Как отредактировать два поля в одном столбце и отобразить их как одно поле в сетке кендо?

У меня есть источник данных с двумя полями, такими как «Год» и «Месяц», и я должен объединить их вместе, чтобы отображать как одно поле в одном столбце, и каждое поле будет иметь свой собственный раскрывающийся список отдельно при нажатии кнопки редактирования.

например, у меня есть такие данные, как { Year: "2019", Month: "08" }, и они должны отображаться как 201908 или 2019/08 в одном столбце.

все, что я знаю, это использовать шаблон столбца, например:

template: "<span>#= Year ##= Month #</span>"

or

template: "<span>#= Year #</span><span>#= Month #</span>"

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

Есть ли решение?

<div id="TargetDiv">
    <table id="Grid" data-bind="source: dataSource" class="gridtable"></table>
</div>

Это для Kendo-grid с фреймворком HTML5, TypeScript и MVVM.

Я определил таблицу сетки в cshtml

<div id="TargetDiv">
    <table id="Grid" data-bind="source: dataSource" class="gridtable"></table>
</div>

и удалил шумы в моем коде, чтобы его было легче читать. Год и месяц содержатся в разных HTML-тегах, я пытался использовать шаблон редактирования в «редактировании», но, похоже, у меня это не работает.

Настройка источника, например:

let vm = {
    dataSource: new kendo.data.DataSource({
        data: [
            { SN: 1, Year: "2019", Month: "01", Title: "Project1" },
            { SN: 2, Year: "2020", Month: "04", Title: "Project2" },
            { SN: 3, Year: "2020", Month: "09", Title: "Project3" }
        ],
        schema: {
            model: {
                id: 'SN',
                fields: {
                    SN: {
                        type: 'number',
                        editable: false,
                        nullable: false
                    }
                    , 'Year': { type: 'string' }
                    , 'Month': { type: 'string' }
                    , 'Content': { type: 'string' }
                }
            }
        }
    }),
}

Настройка сетки, например:

$('#Grid').kendoGrid({
    columns: [
        "SN",
        {
            title: "YearMonth",
            template: "<span>#= Year #</span><span>#= Month #</span>"
        },
        {
            command: {
                name: 'edit',
                text: { edit: "", update: "", cancel: "" }
            },
            title: "edit"
        }
    ],
    editable: {
        mode: "inline"
    },
    edit: function (e) {

    }
});

kendo.bind('#TargetDiv', vm);

person ShengMin Lin    schedule 14.08.2019    source источник
comment
Я думаю, вы должны использовать всплывающее окно для редактирования. В противном случае было бы сложно (и некрасиво) добавить столбец только для редактирования. См. demos.telerik.com/kendo-ui/grid/editing-popup для всплывающих окон в сетках.   -  person Carsten Franke    schedule 14.08.2019


Ответы (1)


Вот вам простое додзе, которое должно позволить вам привязать пользовательский встроенный редактор.

https://dojo.telerik.com/uficAxOz/6

Все, что я сделал, это привязал поле, которое вы хотели отредактировать, к одному из значений. В конечном счете, не имеет значения, к какому полю мы его привязываем, ему просто нужно знать, что оно должно быть привязано, а затем мы применяем пользовательскую функцию редактора, которая затем добавляется к ячейке. Чтобы упростить редактирование редактора, я извлек это для вас в шаблон, а затем получил функцию добавления этого html к объекту-контейнеру.

поэтому ваше поле будет выглядеть примерно так:

 {
            title: "YearMonth",
            field:"Year", 
            template: "<span>#= Year #</span><span>#= Month #</span>" ,
            editor: customEditor

        }

тогда функция редактора выглядит так:

 function customEditor(container, options) {
   var template = $('#editorTemplate').html();
   $(template).appendTo(container);
 }

а шаблон такой:

     <script id="editorTemplate" type="text/x-kendo-template"> 
       <div> <select data-role="dropdownlist" name="Year">
    <option>2010</option>
    <option>2011</option>
    <option>2012</option>
    <option>2013</option>
    <option>2014</option>
    <option>2015</option>
    <option>2016</option>
    <option>2017</option>
    <option>2018</option>
    <option>2019</option>
    <option>2020</option>
    <option>2021</option>
    <option>2022</option>
    <option>2023</option>
    <option>2024</option>


  </select> <select data-role="dropdownlist" name="Month">
    <option>01</option>
    <option>02</option>
    <option>03</option>
    <option>04</option>
    <option>05</option>
    <option>06</option>
    <option>07</option>
    <option>08</option>
    <option>09</option>
    <option>10</option>
    <option>11</option>
    <option>12</option>



  </select> </div>

      </script>

Все, что я сделал, это убедился, что имя элементов управления соответствует полю свойства для свойств модели, которые вы указали в своем источнике данных.

person David Shorthose    schedule 14.08.2019
comment
ВОТ ЭТО ДА! Это именно тот ответ, который мне нужен! Большое спасибо! Я искал это пару дней. - person ShengMin Lin; 15.08.2019
comment
Рад, что смог помочь. - person David Shorthose; 15.08.2019