2015-11-20 46 views
0

我有一些代码在我的工作,使用ASP.net(我从来没有碰过),但我需要排序它。下面是我需要Dscrp排序列表框:在ASP.net排序列表框

foreach (InteractiveInfo template in ddlsource) 
    { 
     Product thisProduct = FindProduct(template.UProductId); 
     if (thisProduct != null) 
     { 
      ddlProducts.Items.Add(
       new ListItem(
        string.Format("{0} ({1})", thisProduct.Dscrp, thisProduct.UProductId), 
        template.UProductId.ToString(CultureInfo.InvariantCulture))); 
     } 
    } 
    ddlProducts.DataBind(); 
} 

我发现这个链接:

https://gist.github.com/chartek/1655779

所以我想在最后加入这样的:

ddlProducts.Items.Sort(); 

但它只是给了我这个错误:

Does not contain a definition for 'Sort'

+0

你确定这是ASP经典? '.DataBind()'和你的C#标签都让我怀疑它。 – Martha

+0

@Martha不是100%确定,但它不是MVC。它使用aspx扩展名和aspx.cs作为文件后面的代码,所以我认为这是遗留问题。 – djblois

+0

不,.aspx是asp.net的扩展。经典的asp只是使用.asp扩展名(并没有“后面的代码”的概念)。 – Martha

回答

1

如果您的应用程序在.NET 3.5或更高版本上,请查看MSDN: Extension Methods

您提供的tutorial link正在使用扩展方法概念,其中Sort()方法被装饰到ListItemCollection(即ddlProducts.Items)类型上。

扩展方法应该在非泛型静态类中定义。所以本教程缺少一个类定义。你可以尝试:

public static class ExtensionsMethods //Notice the static class 
{ 
    public static void Sort(this ListItemCollection items) 
    { 
      //... Implement rest of logic from the tutorial 
    } 

    // Other extension methods, if required. 
} 

希望这对你有所帮助。

0

使用类似这样的不完美,但它更新按照您的要求

public static void Sort(this ListItemCollection items) 
    { 
     var itemsArray = new ListItem[items.Count]; 
     items.CopyTo(itemsArray,0); 

     Array.Sort(itemsArray, (x, y) => (string.Compare(x.Value, y.Value, StringComparison.Ordinal))); 
     items.Clear(); 
     items.AddRange(itemsArray); 

    }