使用jstree和asp.net mvc更改数据库中的sortorder

时间:2011-10-19 08:10:41

标签: jquery asp.net-mvc jstree

我正在尝试更改数据库表中的排序顺序,如下所示:

id parentid sitename sortorder
1  0        home     0 
2  0        about    1 
3  0        product  2 
4  0        contact  3

现在,当我使用jstree在“产品”和“联系人”之间拖动“home”时,我需要更改所有4个站点的排序顺序。当我放弃“home”站点时,我知道的是id,parentid和新的sortorder-index,但是我的更新linq sql将如何使其工作?

1 个答案:

答案 0 :(得分:1)

使用Adjacency-Model,您没有太多选择,但需要选择并更新每个兄弟。

SELECT id, sortorder FROM table WHERE parentid = _MOVED ELEMENT PARENT ID_ ORDER BY sortorder DESC

这将为您提供此元素的所有sibbling。现在,您需要根据输入重新排序结果数组。搜索移动的元素并在数组层次结构中移动。

更新节点,你完成了一个排序顺序(一个简单的计数器就足够了),你就完成了。

我可以为你提供一些伪代码,但ASP不是我的语言。希望这个想法也有帮助。

<强>更新

PHP就是。

//search reorder element
$movedElementOldOrderIndex = $movedElementFromDb['sortorder'];
//target array
$newOrderedElements = array();
foreach($elementsFromDb as $order => $el) {
   //duplicate detection
   if($order == $movedElementOldOrderIndex) {
        continue;
   }

   //reordering is here
   if($movedElementNewOrderIndex == $order) {
       $newOrderedElements[] = $elementsFromDb[$movedElementOldOrderIndex];
   }

   //push all other elements
   $newOrderedElements[] = $el;
}

这将为您提供一个数组,index == sortorder,您可以相应地更新数据库记录。

<强>更新

$ movdeElementFromDB - 在请求中移动的实际db元素

$ el - 是上面查询的当前元素/结果的一个兄弟