Сортировка DropDownList? - C#, ASP.NET

Мне любопытно относительно оптимального маршрута (больше взгляда к простоте, не скорости или эффективности) отсортировать DropDownList в C#/ASP.NET - я посмотрел на несколько рекомендаций, но они не нажимают хорошо мной.

Править: Люди, я не управляю, как данные входят в DropDownList - я не могу изменить SQL.

34
задан scrot 21 October 2008 в 17:27
поделиться

4 ответа

Рекомендуется отсортировать данные перед их привязкой к 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 #

2
ответ дан 27 November 2019 в 16:19
поделиться
        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();
0
ответ дан 27 November 2019 в 16:19
поделиться

Решение на 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();
    }

Засуньте его в свою библиотеку утилит для легкого повторного использования.

21
ответ дан 27 November 2019 в 16:19
поделиться

Для сортировки объектного источника данных, возвращающего набор данных, используется свойство Sort элемента управления.

Пример использования На странице aspx для сортировки по возрастанию ColumnName

<asp:ObjectDataSource ID="dsData" runat="server" TableName="Data" 
 Sort="ColumnName ASC" />
0
ответ дан 27 November 2019 в 16:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: