0

私は剣道グリッドを持っています。そこで、次のようなエディタを定義しました:

        @(Html.Kendo().Grid(Model.Data)
        .Name("GridINT")
        .Editable(editable => editable
            .Mode(GridEditMode.PopUp)
            .TemplateName("MyTemplateName")
            .Window(w => w.Width(500))
            .Window(w => w.Title("My Template")))

エディターを使用する前に、マウスアップ ハンドラーを行にバインドし、コマンド ボタンのスタイルを微調整します。Submit、Cancel、または 'X' のいずれかでエディターを閉じると、影響を受ける行のハンドラーとスタイルの微調整がなくなります。それらを復元する必要がありますが、有効なイベントが見つかりません。キャンセル クリック イベントを次のようにバインドしました。

    $('.k-grid-cancel').bind('click', function ( e ) {
    colorCommandCells();
});

しかし、ここでハンドラー/スタイルをグリッド行に復元すると、エディターを閉じるプロセスによって、実行したことが取り消されます。

結論: エディターがグリッドの更新を終了したこと (先ほど説明したように、エディターがキャンセルされた場合でも終了します) と、エディターが台無しにした行はどの行であったかをどのように知ることができますか?

これは、コマンド セルに色を付けるコードです。

    function colorCommandCells() {
    // This block colors the command cell according to ISNEW.  It must run every time the DataBound event occurs.
    var grid = $("#GridINT").data("kendoGrid");
    var gridData = grid.dataSource.view();
    for (var i = 0; i < gridData.length; i++) {
        var currentUid = gridData[i].uid;
        var currentRow = grid.table.find("tr[data-uid='" + currentUid + "']");
        var editButton = $(currentRow).find(".k-grid-edit");
        var aColor = gridData[i].ISNEW == 1 ? "#FFCCFF" : "transparent";
        var aText = gridData[i].ISNEW == 1 ? "Add" : "Edit";
        var parent = $(editButton).closest("td");
        $(parent[0]).css('background-color', function () { return aColor; });
        editButton[0].innerHTML = "<span class=\"k-icon k-edit\"></span>" + aText;
    }
}
4

2 に答える 2

1

基本的には、このような操作のたびに Grid が再バインドされるため、Grid の tbody に関連付けられたデリゲートイベントを使用するか、Grid のdataBoundイベントが発生するたびにイベントをバインドするとよいでしょう。

于 2013-10-01T19:21:39.333 に答える
0

この回答には 2 つの部分があります。まず、グリッドの DataSource を構築するときに、同期イベントに関数を割り当てます。

.Events(e => e.Sync("syncGrid"))

また、Grid を構築するときに、Cancel イベントに関数を割り当てます。

.Events(e => e.DataBound("gridIsDataBound").Cancel("cancelEditor").Edit("gridEdit"))

ポップアップ エディターが "Submit" によって閉じられると Sync イベントが発生し、ポップアップ エディターが "Cancel" または "X" によって閉じられると Cancel イベントが発生するため、両方が必要です。どちらの関数も次のように呼び出す必要があります。 colorACommandCell は、スタイル値を復元する場所です。

function closeEditor() {
    var timer;
    clearTimeout(timer);
    timer = setTimeout(colorACommandCell, 100);
}

エディターが閉じた後に発生するグリッドに関連するアクティビティがまだいくつかあります (これが私のスタイルの微調整を壊すものです)。「修正」をキューに入れて 0.1 秒待つと、上書きされないことがわかりました。ただし、理想的には、エディターが本当に終了したときに発生する、より確実なイベントが必要です。私のコードを実行するすべてのマシンでこのタイマーを信頼できるとは思っていません。

于 2013-10-02T23:07:18.343 に答える