0

私は答えを求めてWebをトロールしてきましたが、予想よりも複雑な場合(または解決策がわからない場合)かもしれませんが、選択した行をから削除する方法を探しています。ゴミ箱アイコンをクリックしてjqgridを作成します。

現在、私のグリッドにはLinqtoSQLデータが入力されています。これが私のグリッドです:

jQuery("#grid").jqGrid({
                     url: '<%= ResolveUrl("~/Home/GetData") %>',
                     datatype: "json",
                     mtype: 'GET',
                     postData: { DDLid: function () { return jQuery("#DDL option:selected").val(); } },
                     colNames: ['Col1', 'Col2'],
                     colModel: [
                        { name: 'Col1', index: 'Col1', width: 200, editable: false },
                        { name: 'Col2', index: 'Col2', width: 200, editable: false }
                        ],
                     jsonReader: {
                         repeatitems: false
                     },
                     rowNum: 10,
                     pager: jQuery('#gridpager'),
                     sortname: 'Type',
                     viewrecords: true,
                     sortorder: "asc",
                     caption: "Table"
                 }).navGrid('#gridpager', { del: true, add: false, edit: false, search: false }, {}, {}, {url: "Delete"});

現在、投稿データの「id」はこのテーブルの主キーではありません。グリッドにデータを入力するために必要なだけです。選択した行IDを取得してDeleteメソッドに渡したいのですが、それを行う方法が見つかりません。

postDataで使用しようとしjQuery("#grid").getGridParam('selrow')ましたが、常にnullを返します。

どんな助けでも大歓迎です。

参考までに、私の削除方法は次のとおりです。

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Delete(int DDLid) 
    {
        int row = Convert.ToInt32(/*I NEED THIS ID*/);
        var query = from x in _ctx.DataTable
                    where ((x.id == row))
                    select x;
        _ctx.DataTable.DeleteOnSubmit(query.Single());
        _ctx.SubmitChanges();
        return Json(true);
    }

このメソッドは呼び出されて問題ありませんが、間違ったIDを取得しています。選択した行のIDが必要です。DDLidが複数の行を返すため(グリッドへの入力に使用されるため)、これは機能しません。

それが理にかなっていることを願っています。

4

3 に答える 3

1

選択したインデックスをどこに渡すかを発見しました(ただし、選択したインデックスではなく主キーを探していることに気付きましたが、関係なく同じ結果です)

これをnavGridに追加する必要がありました:

 {url: "Delete", mtype: "POST", reloadAfterSubmit: true, 
       serializeDelData: function (postdata) {
                         var selectedrowindex = jQuery("#grid").jqGrid('getGridParam', 'selrow');
                         var dataFromCellByColumnIndex = jQuery('#grid').jqGrid ('getCell', selectedrowindex , 1); 
                         return {DDLid: postdata.id, name: dataFromCellByColumnIndex};
       }
 });

したがって、これは列の値を DDLid だけでなく削除メソッドにも渡しますが、dataFromCellByColumnIndex と selectedrowindex を簡単に交換できます。

于 2012-05-15T20:29:13.643 に答える
0

パラメータDeleteを持つアクションを実装するだけです:id

public JsonResult Delete(string id) {
    ...
}

JavaScript コードでアクションを参照するには、現在使用しているもの'url: <%= Url.Action("Delete") %>'の代わりにurl: "Delete"使用します。

回答用に作成したデモ プロジェクトをここからダウンロードできます。プロジェクトは、現在必要のない他の多くの機能とともに行の削除を実装しています。

于 2012-05-14T22:29:16.057 に答える
0

独自のパラメーターを使用して、削除メソッド内で別の投稿を作成できます。グリッドを定義したら、各アクションを詳細に定義できます。実際の削除を正しい ID で投稿し、元の投稿は偽の ID を投稿しています。JQgrid は、主キーではなく削除に行数を使用しています。彼らは最近のバージョンでそれを変更するかもしれませんが、これは Jqgrid 3.8 で動作していました

 jQuery("#ClientGrid").jqGrid('navGrid', '#ClientGridPager',
{ view: true, edit: true, search: false }, //options
{height: 240, caption: 'Edit Client', beforeShowForm: hideIDColumn, reloadAfterSubmit: true, mtype: 'POST', url: "/Settings/EditClient", jqModal: false, closeOnEscape: true, bottominfo: "Fields marked with (*) are required" }, // edit options
{height: 340, caption: 'Add Client', beforeShowForm: hideIDColumn, reloadAfterSubmit: true, mtype: 'POST', url: "/Settings/CreateClient", jqModal: false, closeOnEscape: true, bottominfo: "Fields marked with (*) are required", closeAfterAdd: true }, // add options
//delete method
{reloadAfterSubmit: true, beforeSubmit: function (postdata, formid)
{
    var lastselectedID = -1;
    if (ClientGridrow != null || typeof (ClientGridrow) != "undefined")
    {
        lastselectedID = $("#ClientGrid").getCell(ClientGridrow, 'ID_PK');
    }
    //CUSTOME delete to send taskid instead of rowid
    $.ajax({ type: "POST", url: "/Settings/DeleteClient/?objid=" + lastselectedID,
        data: "", success: function (response)
        {
            $("#ClientGrid").trigger("reloadGrid"); //reloadAfterSubmit: true is not working in Chrome
        }
    });
    return [true, "Delete failed message"];

}, caption: 'Delete Client', datatype: 'local', url: "/Settings/DeleteClient/?objid=-1", jqModal: false, closeOnEscape: true
}, // del options..we make two posts
  {closeOnEscape: true }, // search options
  {height: 230, width: 350, jqModal: false, closeOnEscape: true} // view options
   );
于 2012-05-15T04:46:37.423 に答える