4

データと複数の列(たとえば、列1、2、および3)を含む剣道グリッドがあります。列1、2、3は、互いの値に基づいて編集できる(または編集できないようにする)必要があります。これは行固有です。

たとえば、列1(日付)が列2(日付)未満の場合、列3は編集できません。

列全体を無効または有効にするのは簡単ですが、私の要件は行固有です。したがって、行1で列3を有効にし、行2で列3を無効にすることができます。

何かご意見は?

4

2 に答える 2

14

私の提案は、条件を検証するエディター関数を作成することです。もちろん、これにはアドホックソリューションであるという欠点がありますが...それは機能します!

次のエントリ(データソースのデータ)を作成します。

var entries = [
    { id:1, col1: new Date(2012, 11, 31), col2: new Date(2013, 0, 1), col3: "Yes" },
    { id:2, col1: new Date(2013, 0, 1), col2: new Date(2013, 0, 1), col3: "No" },
    { id:3, col1: new Date(2013, 0, 2), col2: new Date(2013, 0, 1), col3: "No" }
];

次に、グリッドを次のように定義します。

var grid = $("#grid").kendoGrid({
    dataSource : {
        data    : entries,
        schema  : {
            model: {
                id    : "id",
                fields: {
                    col1: { type: "date"},
                    col2: { type: "date"},
                    col3: { editable: true }
                }
            }
        },
        pageSize: 3
    },
    columns    : [
        { field: "col1", title: "Col1", format: "{0:yyyy-MM-dd}" },
        { field: "col2", title: "Col2", format: "{0:yyyy-MM-dd}" },
        { field: "col3", title: "Edit?", editor: checkAndEdit }
    ],
    editable   : "incell",
    navigatable: true,
    pageable   : true
}).data("kendoGrid");

ここcol1で、col2は日付であり、が未満の場合にのみcol3編集できる文字列です。 col1col2

関数を次のように定義checkAndEditします。

function checkAndEdit(container, options) {
    if (options.model.col1 < options.model.col2) {
        $('<input data-bind="value:' + options.field + '" ' +
                'data-format="' + options.format + '" ' +
                'class="k-input k-textbox"/>')
                .appendTo(container);
    } else {
        grid.closeCell(container);
    }
}

<のinput場合は対応するフィールドを生成し、それ以外の場合は終了モードを呼び出します。col1col2closeCelledit

ここで実行されているのを見ることができます

于 2013-01-09T00:02:40.093 に答える
3

単純に使用するだけです(グリッド列にバインドするもの)

[Editable(false)]
public string ob_name { get; set; }

剣道UIグリッドに使用するコスチュームクラスで。

詳細については、こちらもご覧ください。

于 2013-05-13T04:42:42.220 に答える