سؤال

أرغب في تنفيذ وظائف الحذف الخاصة بي في JQGrid. أنا أستخدم واجهة المستخدم المدمجة حاليًا (SELECT ROW ، اضغط على زر TRASHCAN في تذييل ، تأكيد) لكنني أفضل أن يكون لديك زر حذف في كل صف وتنفيذ واجهة المستخدم الخاصة بي للتأكيد.

لا أرى أي شيء في API يتيح لي هذا إطلاق حذف على الخادم - فقط delRowData, ، الذي يحذفها على العميل. هل يمكن هذا؟

(أنا أستخدم مكون ASP.NET, ، FWIW).

هل كانت مفيدة؟

المحلول 2

erik حصلت على الطريق الصحيح على هذا واحد. يعمل حله ، لكنه يحافظ على واجهة مستخدم تأكيد المنبثقة الزائفة الحالية ، والتي أردت تجنبه.

كما أنه لا يستفيد من الخدمات jqgrid asp.net مكون يوفر. يعتني المكون في الواقع بجميع عمليات crud طالما أنه يتم توصيله بمصدر بيانات تم تكوينه بشكل صحيح (ObjectDataSource ، SqldataSource ، إلخ).

كانت هذه القطعة المفقودة بالنسبة لي هي الميكانيكا وراء عمليات Crud للمكون. من خلال التغلب على Fiddler ، تمكنت من رؤية أنه ينشر البيانات ذات الصلة إلى نفس الصفحة ، مع عميل كائن JQGrid في QueryString:

MyPage.aspx?jqGridID=ctl00_ctl00_Content_Content_MyJqGrid

للحذف ، تكون محتويات المنشور كما تصف erik:

oper=del&id=18

لذلك تمكنت من تكرار العملية بمفردي حتى أحتفظ بالسيطرة الكاملة على العملية برمتها:

$(".DeleteButton", grid).click(function(e) {
    var rowID = getRowID(this);
    $(grid).setSelection(rowID, false);
    if (confirm('Are you sure you want to delete this row?')) {
        var url = window.location + '?jqGridID=' + grid[0].id;
        var data = { oper: 'del', id: rowID };
        $.post(url, data, function(data, textStatus, XMLHttpRequest) {
            $(grid).trigger("reloadGrid");
        });
    } else {
        $(grid).resetSelection();
    } // if
}); // click

getRowID = function(el) {
    return $(el).parents("tr").attr("id");
};

نصائح أخرى

لا يوجد جزء من مكون JQGrid الأساسي الذي يتولى حذف جانب الخادم - حتى لو كنت تستخدم الحذف المدمج ، فهو عدم إزالته من جانب الخادم بالنسبة لك ، عليك التعامل مع هذا بنفسك. ولكن إليك كيفية إعداده بحيث يتم استدعاء البرنامج النصي عندما ينقر شخص ما على زر الحذف المخصص:

// your custom button is #bDelete
$("#bDelete").click(function(){ 

    // Get the currently selected row
    toDelete = $("#mygrid").jqGrid('getGridParam','selrow');

    // You'll get a pop-up confirmation dialog, and if you say yes,
    // it will call "delete.php" on your server.
    $("#mygrid").jqGrid(
        'delGridRow',
        toDelete,
          { url: 'delete.php', 
            reloadAfterSubmit:false}
    );
});

المعلومات التالية قد سبق عبر post إلى عنوان URL الخاص بك الحذف

Array
(
    [oper] => del
    [id] => 88
)

من الواضح أن المعرف هو المعرف الذي انتقلت إلى الوظيفة في هذه الحالة ، وقيمة toDelete.

لقد فعلت هذا في الواقع لمشروعي الخاص ، ردًا على سؤالك - على الرغم من أنني كان لدي فكرة غامضة عن كيفية القيام بذلك قبل أن أرى السؤال. لذا ... شكرا لجعلني الوصول إليه!

حل آخر هو النقر برمجياً على أيقونة الحذف (إن وجدت). معرف رمز الحذف (في الواقع div) هو "del_ [Gridid]. قد لا يكون هذا حلاً قويًا تمامًا لأنهم قد يغيرون تسمية الهوية. لكنك تحصل على نفس السلوك بالضبط (وأيضًا تأكيد Modal).

مثال:

$('#MyButton').click(function() { $('#del_' + gridId).click(); });
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top