Мне любопытно относительно оптимального маршрута (больше взгляда к простоте, не скорости или эффективности) отсортировать DropDownList в C#/ASP.NET - я посмотрел на несколько рекомендаций, но они не нажимают хорошо мной.
Править: Люди, я не управляю, как данные входят в DropDownList - я не могу изменить SQL.
Рекомендуется отсортировать данные перед их привязкой к DropDownList, но в случае, если вы не можете, вот как вы сортируете элементы в DropDownList.
Сначала вам нужно сравнение class
Public Class ListItemComparer
Implements IComparer(Of ListItem)
Public Function Compare(ByVal x As ListItem, ByVal y As ListItem) As Integer _
Implements IComparer(Of ListItem).Compare
Dim c As New CaseInsensitiveComparer
Return c.Compare(x.Text, y.Text)
End Function
End Class
Затем вам нужен метод, который будет использовать этот Comparer для сортировки DropDownList
Public Shared Sub SortDropDown(ByVal cbo As DropDownList)
Dim lstListItems As New List(Of ListItem)
For Each li As ListItem In cbo.Items
lstListItems.Add(li)
Next
lstListItems.Sort(New ListItemComparer)
cbo.Items.Clear()
cbo.Items.AddRange(lstListItems.ToArray)
End Sub
Наконец, вызовите эту функцию с вашим DropDownList (после того, как он был привязан к базе данных)
SortDropDown(cboMyDropDown)
PS Извините, но я выбрал язык VB. Вы можете использовать http://converter.telerik.com/ для преобразования кода из VB в C #
List<ListItem> li = new List<ListItem>();
foreach (ListItem list in DropDownList1.Items)
{
li.Add(list);
}
li.Sort((x, y) => string.Compare(x.Text, y.Text));
DropDownList1.Items.Clear();
DropDownList1.DataSource = li;
DropDownList1.DataTextField = "Text";
DropDownList1.DataValueField = "Value";
DropDownList1.DataBind();
Решение на C# для .NET 3.5 (нужны System.Linq и System.Web.UI):
public static void ReorderAlphabetized(this DropDownList ddl)
{
List<ListItem> listCopy = new List<ListItem>();
foreach (ListItem item in ddl.Items)
listCopy.Add(item);
ddl.Items.Clear();
foreach (ListItem item in listCopy.OrderBy(item => item.Text))
ddl.Items.Add(item);
}
Вызывайте его после привязки выпадающего списка, например, OnPreRender:
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
ddlMyDropDown.ReorderAlphabetized();
}
Засуньте его в свою библиотеку утилит для легкого повторного использования.
Для сортировки объектного источника данных, возвращающего набор данных, используется свойство Sort элемента управления.
Пример использования На странице aspx для сортировки по возрастанию ColumnName
<asp:ObjectDataSource ID="dsData" runat="server" TableName="Data"
Sort="ColumnName ASC" />