資料上移,下移,至底以及置頂等操作思路解析

2021-10-06 18:56:48 字數 1402 閱讀 5048

(注:這裡的排序號,指的是乙個排序的規則。能按照我們的要求排序就行了。資料也不一定是1,2,3,4,5也可以是a,b,c,d只要是能符合我們要的排序要求就行了。其他欄位也無參考意義,只是作為展示用!我們將排序號在資料庫存為sort作為標準用)

要求:資料c置頂

看到這個問題,我大腦的第一反應就是:將需要置頂的資料sort值和第一位資料的sort值交換,這樣

就達到了置頂的效果。不知道有沒有小夥伴是和我剛開始一樣的思路。這樣做的話,確實達到了置頂的效果。但是會有個問題:假如被置頂資料和置頂資料中間有資料的話,就會導致排序錯誤。

例如:我們現在將c資料置頂,置頂後效果應該是c,a,b,d,e。按照我們剛剛的思路:將c的sort和a的sort交換,最後效果是c,b,a,d,e。c雖然置頂了。但是效果並不是我們想要的.。所以這個想法是錯誤的。

思路:如果要資料置頂的話,我們將要被指定的資料的sort值賦值成排序規則的第一位,然後將其他的資料sort值按照原來的排序方法迴圈下去。就能達到置頂排序的效果。

我們這裡排序是從1開始,所以我們將c置頂的時候,我們將它sort=1,然後abde按照原來的順序迴圈就行了。c 的sort=1 下乙個就是a,a 的sort=2,一次類推迴圈遇到c就跳過。結果就是 c sort=1

a sort=2 b sort=3 d sort=4 e sort =5.。然後按照sort值排序就是c a b d e。暫定把這個方法稱為:重算。再次強調:sort只是排序規則,我們用到的只是他的規則。這個欄位名字和值都不重要,都是可以自己取的。可以叫no,值也可以是100 ,200,300。我們要的只是他的排序規則

要求:資料c置底

和剛剛思路一樣,我們還是用重算的方法。如果我們想將c置底。我們首先迴圈原始的排序方法。將他們的sort重新賦值。原來排序是 a b c d e,迴圈重新賦sort值。

迴圈從a開始:

a sort =1

b sort =2

遇到c跳過暫時不賦值

d sort =3

e sort =4

迴圈完之後,最後資料的sort值+1就是c的sort值。

c sort =5

重算賦值後排序結果就是: a b d e c .這樣就完成了

相對於上移,下移就相對簡單了。

上移:首先判斷上移資料是否置於第一位,如果不是就將它的sort值和上一條資料的sort值直接交換,

如果sort排序是有序:比如 1 2 3 4 5 可以直接簡單粗暴將上移資料的sort-1,上一條資料的sort+1

下移:同理上移。

遇到資料新增,就要看我們自己是怎麼定義。可以定義將新資料置頂或者放最後。用上文的重算方法都能解決。

上移 下移功能

實現資料的上移和下移功能 實現效果如下 功能實現過程為 上移和下移是交換兩條資料的位置序號。我將主要業務放在service,具體操作放在dao中。上移的service層 public void moveup long id 交換position的值 int temp forum.getpositio...

ListBox 上移下移

前台html div style width 600px margin 0px auto div style float left asp listbox id lsboxhotword runat server height 300px asp listbox div div style floa...

datagridview 整行上移下移

設計器中只是新增了按鈕和datagridview,把datagridview的selectionmode設定為fullrowselect private datatable dt 定義乙個datatable,作為datagridview的資料來源 給datatable賦初值 private void...