2

私のデータソースは、コントローラー メソッド (ASP MVC) を使用して行を取得します。ユーザーがグリッドからすべての行を削除できないように何かを設定する必要があるため、グリッド ID の最後の行の削除ボタンがクリックされたときに、それが最後であることを認識する必要があります。私は DataSource.Total() メソッドを使用しようとしてきましたが、これまでのところ、次のようになっています。

        $("#location-list").kendoGrid({
            dataSource: ds_locationsList,
            sortable: true,
            height: "150px",
            width: "300px",
            editable: "inline",
            columns: [{
                field: "LocationName", title: "Trespassed Location(s)"
            }, {
                command: [{
                    name: "destroy",
                    text: "Delete",
                    click: function(){
                        var rowCount = ds_locationsList.total();

                        if (rowCount < 1) {
                            $("#dialog").dialog({
                                modal: true,
                                buttons: {
                                    Ok: function () {
                                        $(this).dialog("close");
                                    }
                                }
                            });
                            return false;
                        }
                      }
                    }], 
                    width: "110px"
            }]
        });

これは機能しませんでした。おそらく何らかの「afterLoad」で、destroy 関数の外部から rowCount を取得する必要があると考えています。私もそれをすべて外でやろうとしましたが、どちらの場合も何も起こりません:

        $(".k-grid-delete").on("click", function () {
            var rowCount = ds_locationsList.total();

            if (rowCount < 1) {
                $("#loclistval").removeClass("hidden");
                return false;
            }
        });

誰かがこれをしなければなりませんでしたか?助言がありますか?

================================編集================ =====================

以下に示すように、カスタム削除機能を試しましたが、クライアント側からのみ削除されます。debuggin を試しましたが、delete 関数に挿入したブレークポイントがヒットしないため、呼び出しを台無しにしているに違いありません。これが私のトランスポートコードです:

        transport: {
                    read: {
                        url: '@Url.Action("JsonPopulateTrespassList", "TrespassOrder")/' + PersId,
                        dataType: 'json',
                        type: "POST"
                    },
                destroy: {
                        url: '@Url.Action("JsonDeleteLocation", "TrespassOrder")',
                        dataType: 'json',
                        type: "POST"
                    }
        },

そして私のパラメータマップ:

         parameterMap: function (options, operation) {
             if (operation == "destroy" && options.models) {
                 var values = {};
                 values["TrespassLocId"] = options.models[0].TrespassLocId;
                 return values;
             }
         },

カスタム削除:

function locDelete(e) {
    var len = this.dataSource.data().length;

    if (len === 1) {
        alert("There must be at least one location.");
    }
    else {
        this.removeRow($(e.target).closest("tr"));
    }
}

およびグリッド コード:

       $("#trespassed-location-list").kendoGrid({
            dataSource: ds_locationsList,
            sortable: true,
            height: "150px",
            width: "300px",
            editable: "incell",
            columns: [{
                field: "LocationName", title: "Trespassed Location(s)"
            }, {
                command: [{ name: "destroy", text: "Delete", click: locDelete }],
                width: "110px",
            }] 
       });

したがって、クライアント側から行を削除しますが、サーバー側からは削除しません。しかし、デバッグしようとすると、locDelete 関数のブレークポイントにヒットすることはないので、何が起こっているのか確信が持てます。

4

1 に答える 1