0

我通过 xml 节点填充 DropDownButton

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

并且需要对项目进行排序,例如:

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

3 回答 3

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.

于 2012-08-25T16:19:55.920 回答
1

将 .OrderBy() 添加到 SelectNodes() 的末尾

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

编辑:Wiktor 是正确的,我相信需要添加 .OfType 所以我也在这里添加它。

于 2012-08-25T16:23:04.920 回答
1

你不能。

但是你可以这样做:

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

基本原理是 DropDownItems 是一个 ToolStripItemCollection,它实现了一个普通的 IList(对象)。由于对象不是自然可比的,因此您无法对 IList 进行排序,但您可以将其强制转换为 List<string> 并对其进行排序。

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

祝你好运!

于 2012-08-25T16:25:32.230 回答