2013-12-16 135 views
2

我有一個jqGrid,可以啓用SortableRows選項。以前我一直在允許行總是被排序。當行被刪除時,數據庫通過ajax調用進行更新。要做到這一點,我一直在使用update選項。jqGrid可排序的行,只允許在某些行上排序

現在我需要實現排序,不允許某些行。即那些對於可見列之一具有列值「1」的行。我已經成功地阻止了ajax更新,但從視覺上看,這個行仍然在新的位置丟棄。我需要在視覺上將行恢復到原始位置。

到目前爲止,我有這個代碼,它的工作原理,但與評論的地區是我堅持如何將行恢復到以前的位置。

jQuery("#all_driver_runs").jqGrid('sortableRows', { 
    update: function (ev, ui) { 
     //first check the value of the 'placed_in_runs' column 
     if ($('#all_driver_runs').jqGrid('getRowData', ui.item[0].id)['placed_in_run'] !== "1") { //here update the database 
      if (!ui.item[0].previousSibling) { 
       $.post("scripts/update_driver_run_sort.php", { 
        this_one: ui.item[0].id, 
        prev: 'none', 
        next: ui.item[0].nextSibling.id 
       }); 
      } else if (!ui.item[0].nextSibling) { 
       $.post("scripts/update_driver_run_sort.php", { 
        this_one: ui.item[0].id, 
        prev: ui.item[0].previousSibling.id, 
        next: 'none' 
       }); 
      } else { 
       $.post("scripts/update_driver_run_sort.php", { 
        this_one: ui.item[0].id, 
        prev: ui.item[0].previousSibling.id, 
        next: ui.item[0].nextSibling.id 
       }); 
      } 
     } else { 
      /* 
      *no DB update, and now I need to revert to previous position here ??? 
      */ 
     } 
    } 
}); 

回答

4

由於sortableRows與jQueryUI的的可排序插件兼容,則可以當通過添加類的行,然後在的所述items(或cancel)成員指定它加載它們阻止來自被排序的行sortableRows'選項。

所以,假設類是unmovable,你可以通過".jqgrow:not(.unmovable)"sortableRows。例如:

$('#all_driver_runs').jqGrid('sortableRows', { 
    items: ".jqgrow:not(.unmovable)", 
    /* remaining options if needed */ 
}); 

爲了一類添加到行,看到這個answer

+1

這是一些很好的東西,感謝您的幫助!完美的作品。 –

+0

我遇到了這個設置的問題。現在,如果你有兩個彼此相鄰的不可移動的行,那麼就不可能在它們之間放置一個可移動的行。我仍然希望能夠在兩個不可移動的行之間放置一個可移動的行。 –

+1

查看'取消'成員。檢查[這個小提琴](http://jsfiddle.net/ssarabando/C58z8/)。 「DSK1」列在「APPR」不可用時不可用。嘗試移動「APPR」,看看是否你想要的。 – ssarabando