Telerik MVC Grid - Обновление «не редактируемых» полей с выпадающим списком - PullRequest
0 голосов
/ 30 апреля 2018

У меня установлена ​​сетка, когда я вытягиваю одно из полей с помощью встроенного выпадающего списка.

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

Следующий код работает нормально, если A, B, C и D доступны для редактирования ... НО ... эти значения не должны редактироваться. Значения в этих ячейках должны строго соответствовать значениям выпадающего списка.

function ddl_OnSelect(e)
{
    var DDLdataItem = this.dataItem(e.item);

    var A = DDLdataItem.A;
    var B = DDLdataItem.B;
    var C = DDLdataItem.C;
    var D = DDLdataItem.D;

    var grid = $('#grd').data('kendoGrid');

    var editRow = grid.dataItem("tr.k-grid-edit-row");


    editRow.set("A", DDLdataItem.A);
    editRow.set("B", DDLdataItem.B);
    editRow.set("C", DDLdataItem.C);
    editRow.set("D", DDLdataItem.D);

}

Мне кажется, что я должен иметь возможность отображать значения в столбце шаблона, но я не нахожу никакой хорошей документации по column.template, и когда я делаю что-то подобное, он просто дает мне пустой столбец.

        columns.Template(
            @<text>
                <input type="text" name="A" value="@item.A" readonly />
            </text>
                 ).Title("A");

UPDATE

Хорошо .... так что я сделал, чтобы "исправить" проблему, было ...

Сначала я создал новый шаблонный шаблон ReadOnlyCurrency и поместил его в общие шаблоны Editor.

Затем для каждого из 3 столбцов валюты, к которым это относится, я добавил свойство имени шаблона редактора.

.EditorTemplateName("ReadOnlyCurrency")

Затем я скопировал содержимое шаблона редактора валют и вставил его в шаблон readonlyvururcy

Я выключил счетчики, сделал его доступным только для чтения и включил false.

@model decimal?
@(Html.Kendo().CurrencyTextBoxFor(m => m)
      .HtmlAttributes(new { style = "width:100%;", @readonly = "readonly" })
      .Enable(false)
      .Min(0)
      .Spinners(false)
)

1027 *

Этого достаточно для того, что я пытаюсь сделать, но я не собираюсь отмечать это как ответ.

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

1 Ответ

0 голосов
/ 04 мая 2018

С помощью сообщества telerik я нашел лучшее решение.

Сначала мы оставляем поля модели доступными для редактирования:

model.Field(p => p.A);
model.Field(p => p.B);
model.Field(p => p.C);

Затем в привязке столбца мы устанавливаем редактируемую функцию, которая всегда возвращает false:

columns.Bound(p => p.A).Title("A").Editable("editable").ClientTemplate("<span class='A'>#: kendo.toString(A, 'C') #</span>").ClientFooterTemplate("#= kendo.toString(sum, 'C') #");
columns.Bound(p => p.B).Title("B").Editable("editable").ClientTemplate("<span class='B'>#: kendo.toString(B, 'C') #</span>").ClientFooterTemplate("#= kendo.toString(sum, 'C') #");
columns.Bound(p => p.C).Title("Total").Editable("editable").ClientTemplate("<span class='C'>#: kendo.toString(C, 'C') #</span>").ClientFooterTemplate("#= kendo.toString(sum, 'C') #");

Затем в функции изменения мы устанавливаем значение в dataItem И устанавливаем значение на стороне клиента в clientRow.

var editRow = $("tr.k-grid-edit-row").closest("[data-role=grid]").data("kendoGrid").dataItem("tr.k-grid-edit-row");
var clientRow = $("tr.k-grid-edit-row");
editRow.set("A", this.dataItem(e.item).A);
editRow.set("B", this.dataItem(e.item).B);
editRow.set("C", this.dataItem(e.item).C);
clientRow.find(".A").text(kendo.toString(this.dataItem(e.item).A, 'C'));
clientRow.find(".B").text(kendo.toString(this.dataItem(e.item).B, 'C'));
clientRow.find(".C").text(kendo.toString(this.dataItem(e.item).C, 'C'));

Пока что это дает мне функциональность, которую я искал.

...