2015-02-10 69 views
0

假設我得到了一個包含項目的排序列表,每個項目都可以在此列表中上下排序。首先想到的是有一個int的SortOrder(例如1-10)。這樣做的問題是,在排序時,我總是必須更新至少2個項目(項目3代替項目4,從而切換排序值)。如果我在位置3放置一個新物品,所有物品> 3將不得不在那裏改變sortOrder。如何處理排序「字符串」?

因此,爲了避免這種情況,我可以使用更大的intervalls例如:

N1 : 10 000 
N2 : 20 000 
N3 : 30 000 
N4 : 40 000 
N5 : 50 000 

如果N4將被排序了它看起來像這樣的水平:

N1 : 10 000 
N2 : 20 000 
N4 : 25 000 
N3 : 30 000 
N5 : 50 000 

我的問題是如何處理這是C#中的最佳方式?我應該使用哪種數據類型?我如何避免重新生成整個列表(當不能再進行排序)?

我自己的想法是將它存儲爲代碼和數據庫中的十進制數。

+0

這看起來像一個建議的解決方案,而不是一個問題。你能解釋一下你想解決的問題嗎?我不認爲使用int或小數或其他來排序是一件壞事;只是這個問題沒有解釋爲什麼*你會插入一個新的項目或改變現有項目的排序順序。如果你解釋說我認爲你會有更好的答案。 – 2015-02-10 13:34:01

+1

更新/交換兩個號碼有什麼問題? – DavidG 2015-02-10 13:34:09

+0

我儘量做出儘可能少的更新,這包括往數據庫的往返以及GUI更新。 – Banshee 2015-02-10 14:23:43

回答

0

我使用的方法是使用int數據類型的專用DisplayOrder列;我確實(通常)索引列,但沒有唯一的索引。這樣通過更新值來交換兩個項目並不是太痛苦。通常(並且默認情況下)我不需要通過用戶界面使值可見,所以實際的值從來都不重要。如果具有唯一值是很重要的,那麼這也可以起作用 - 我有一個proc,在需要時運行'重新定位'從1開始的順序值。

0

爲什麼你需要在代碼中的「排序順序」字段?

如果您在列表或其他容器中有內存中的項目,則項目順序是排序順序。

您只需要在將數據保存到數據庫或其他數據庫時指定一個數值。然後,當您檢索要重新填充內存數據的項目時,請按照排序順序獲取它們並將其添加到列表中。

此方法允許對項目進行任何重新排序,並且還可以刪除項目,而不必維護排序順序值,直到您保存數據爲止。

+0

問題是,所做的任何sororder更改都必須保存到databse。所以我試圖做盡可能少的更新。 – Banshee 2015-02-10 14:25:50