我有一個問題,我似乎無法通過搜索找到答案(要麼,要麼我正在尋找完全錯誤的東西!)。我有一個名爲「Top 10」的項目列表,這些項目是從我的數據庫(SortedList,其中int是位置和字符串是項目)填充的排序列表項目中。我希望能夠通過單擊按鈕將項目向上移動&,然後將新訂單保存回數據庫。我對數據庫部分沒問題,它只是重新排序,我真的很苦惱 - 是一個排序列表正確的集合嗎?重新排序集合C#
非常感謝您提供的任何建議。
我有一個問題,我似乎無法通過搜索找到答案(要麼,要麼我正在尋找完全錯誤的東西!)。我有一個名爲「Top 10」的項目列表,這些項目是從我的數據庫(SortedList,其中int是位置和字符串是項目)填充的排序列表項目中。我希望能夠通過單擊按鈕將項目向上移動&,然後將新訂單保存回數據庫。我對數據庫部分沒問題,它只是重新排序,我真的很苦惱 - 是一個排序列表正確的集合嗎?重新排序集合C#
非常感謝您提供的任何建議。
SortedList用於在您的SortedList中添加或刪除項目時維護訂單。
您應該創建對象的自定義列表,然後對該對象的屬性進行排序。
所以,如果在你的數據庫的條目是這樣,你可以把它放在一個對象,將其添加到列表,然後進行排序它使用lambda上有史以來的標準你喜歡
public class LeaguePosition
{
public int Position { get; set; }
public string Team { get; set; }
}
List<LeaguePosition> League = new List<LeaguePosition>();
League.Add(new LeaguePosition() { Position = 2, Team = "Wolves" });
League.Add(new LeaguePosition() { Position = 3, Team = "Spurs" });
League.Add(new LeaguePosition() { Position = 1, Team = "Villa" });
League.Sort((teamA, teamB) => teamA.Position.CompareTo(teamB.Position));
,您還可以在之後使用RemoveAt()和Insert()將項目移動到列表中的自定義位置。
LeaguePosition teamToMove = League[1];
League.RemoveAt(1);
League.Insert(2, teamToMove);
非常感謝您的回覆(足球相關答案更容易理解!) 我想我明白了,所以在您的示例中,如果狼隊的位置向下移動,馬刺隊會自動將 提升一個位置?是否所有其他名單成員保持立場,哪一種方式是你 正在取代移動的項目,它總是起來嗎? – Adam 2010-03-30 20:53:44
是的,他們根據你最後的分類標準保持他們在陣列中的位置。然後你在這種排序中重新定位,直到你決定重新排序。 – 2010-03-30 23:46:07
不,一個SortedList將保留排序(字母/數字)順序的東西。你需要一個簡單的列表,它可以讓你把事情抽出來並把它們插入不同的位置。
SortedList將強制每個項目跟蹤其在列表中相對於其他項目(您的int位置)的位置。這應該是收集的責任,所以你應該使用某種收集,這將允許你上下移動/周圍,而無需手動修正每個項目。
謝謝 - 你能建議一個合適的Colection嗎? – Adam 2010-03-30 20:51:47
我會說SortedList正是你想要的。當你從數據庫中獲取數據時,你希望根據位置字段的順序保存數據(我可以從OP中得知)。我假設你將有一個包含你從數據庫中獲得的數據的類。爲了使數據保持正確的順序,您需要在自定義類中實現IComparable接口,以便SortedList知道使用哪些值保持列表的順序。通過這種方式,您可以按照正確的順序添加/刪除項目。
您可以使用通用列表<>但您必須編寫所有代碼來自行排序項目,SortedList已經這樣做了,爲什麼重新發明輪子?
看看這個頁面瞭解更多信息:
http://www.dotnetspider.com/resources/4679-Applying-custom-sort-SortedList.aspx
@Adam:如何實現列表的看法?你使用什麼樣的視圖? – 2010-03-30 17:40:26
嗨Asaf - 我目前正在收集和數據綁定到一箇中繼器(儘管我對顯示方法不是很珍貴)。 – Adam 2010-03-30 20:06:27