2012-08-25 102 views
0

我填充DropDownButton通過XML節點如何對DropDownButton項進行排序?

foreach (System.Xml.XmlNode node in kats.SelectNodes("Kats/Kat")) 
{ 
btnKats.DropDownItems.Add(node.InnerText); 
} 

,需要對項目進行排序,somethig像:

btnKats.DropDownItems.Sort... // how can I do this 

回答

1

你不能。

但你可以這樣做:

List<string> list = (List<string>) btnKats.DropDownItems; 
list.Sort(); 
btnKats.DropDownItems = list; 

的理由是DropDownItems是實現一個普通的IList(對象)一個ToolStripItemCollection。由於對象本質上不具有可比性,因此不能對IList進行排序,但可以將其轉換爲列表<字符串>並對其進行排序。

http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripitemcollection.aspx

祝你好運!

+0

哦,三種工作方案。但我只能接受一個。感謝everyOne。 – Alegro

3

使用System.Linq的;

.... 

foreach (System.Xml.XmlNode node in 
    kats 
     .SelectNodes("Kats/Kat") 
     .OfType<System.Xml.XmlNode>() 
     .OrderBy(node => node.InnerText) 
     ) 
{ 
    btnKats.DropDownItems.Add(node.InnerText); 
} 

不要手頭的編譯器和這條線可能被不需要

.OfType<System.Xml.XmlNode>() 

。但是,我不確定SelectNodes是否返回IEnumerable<XmlNode>或只是IEnumerable

1

添加上.OrderBy()來)的SelectNodes結束(

foreach(System.Xml.XmlNode node in kats.SelectNodes("Kats/Kat").OfType<XmlNode>.OrderBy(node.InnerText)) 
    { 
     btnKats.DropDownItems.Add(node.InnerText); 
    } 

編輯:Wiktor的是正確的我在neededing添加.OfType,所以我補充說,在這裏也beleive。