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

Мне любопытно выбрать лучший способ (больше 9X_asp.net-website ориентированный на простоту, а не скорость 9X_drop-down или эффективность) для сортировки DropDownList 9X_.cs-file в C# / ASP.NET. Я просмотрел несколько рекомендаций, но 9X_selectbox они не очень хорошо подходят для меня.

Изменить: Ребята, я 9X_visual-c# не контролирую, как данные поступают в DropDownList 9X_drop-down-menu - я не могу изменить SQL.

36
0
12
Общее количество ответов: 12

Ответ #1

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

Если вы получаете DataTable с данными, вы 9X_aspdotnet можете создать DataView на основе этого, а 9X_c# затем привязать к нему раскрывающийся список. Ваш 9X_asp.net-website код будет выглядеть примерно так ...

DataView dvOptions = new DataView(DataTableWithOptions);
dvOptions.Sort = "Description";

ddlOptions.DataSource = dvOptions;
ddlOptions.DataTextField = "Description";
ddlOptions.DataValueField = "Id";
ddlOptions.DataBind();

Параметры 9X_c-sharp текстового поля и поля значения сопоставляются 9X_visual-c# с соответствующими столбцами в таблице данных, которую 9X_aspx вы получаете.

26
0

Ответ #2

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

Решение C# для .NET 3.5 (требуются System.Linq 9X_aspdotnet и System.Web.UI):

    public static void ReorderAlphabetized(this DropDownList ddl)
    {
        List listCopy = new List();
        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);
    }

Вызовите его после привязки 9X_drop-down раскрывающегося списка, например OnPreRender:

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        ddlMyDropDown.ReorderAlphabetized();
    }

Вставьте 9X_selectbox его в свою библиотеку утилит для удобного 9X_drop-down повторного использования.

22
0

Ответ #3

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

Предполагая, что вы используете последнюю 9X_asp.net версию .Net Framework, это будет работать:

List items = GetItemsFromSomewhere();
items.Sort((x, y) => string.Compare(x, y));
DropDownListId.DataSource = items;
DropDownListId.DataBind();

17
1

  • что такое `x` и` y` в `items.Sort ((x, y) => string.Compar ...

Ответ #4

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

DropDownList принимает любой IEnumerable 9X_aspdotnet в качестве источника данных.

Просто отсортируйте 9X_c# его с помощью LINQ.

11
0

Ответ #5

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

Обычно я загружаю DropDownList со значениями 9X_aspdotnet из таблицы базы данных, поэтому самый простой 9X_aspx способ - отсортировать результаты по желанию 9X_.cs-file с помощью предложения ORDER BY вашего оператора 9X_c-sharp SELECT, а затем просто просмотреть результаты 9X_c-sharp и сбросить их в DropDownList.

5
1

  • OP указывает, что он не может изменить SQL, используемый ...

Ответ #6

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

Обратите внимание на this article from CodeProject, который меняет порядок 9X_dropdownlist содержимого раскрывающегося списка. Если 9X_.cs-file вы выполняете привязку данных, вам нужно 9X_aspdotnet будет запустить сортировщик после привязки 9X_selectbox данных к списку.

2
0

Ответ #7

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

Рекомендуется отсортировать данные перед 9X_asp.net их привязкой к DropDownList, но в случае, если 9X_.cs-file вы не можете, вот как вы сортируете элементы 9X_.cs-file в DropDownList.

Сначала вам нужен класс сравнения

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

Затем 9X_aspx вам нужен метод, который будет использовать 9X_c#-language этот 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

Наконец, вызовите 9X_aspx эту функцию со своим DropDownList (после 9X_aspx привязки к базе данных)

SortDropDown(cboMyDropDown)

P.S. Извините, но 9X_c-sharp я выбрал язык VB. Вы можете использовать 9X_drop-down-menu http://converter.telerik.com/ для преобразования кода из VB в C#

2
0

Ответ #8

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

Другой вариант - поместить ListItems в массив 9X_c#-language и отсортировать.

        int i = 0;
        string[] array = new string[items.Count];

        foreach (ListItem li in dropdownlist.items)
        {
            array[i] = li.ToString();
            i++;

        }

        Array.Sort(array);

        dropdownlist.DataSource = array;
        dropdownlist.DataBind();

2
0

Ответ #9

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

Я согласен с сортировкой с использованием 9X_asp.net ORDER BY при заполнении запроса к базе данных, если 9X_c#-language все, что вам нужно, - это отсортировать 9X_c#-language отображаемые результаты в алфавитном порядке. Позвольте 9X_dropdownlist ядру базы данных выполнять работу по сортировке.

Однако 9X_c#-language иногда требуется другой порядок сортировки помимо алфавитного. Например, вам может потребоваться 9X_asp.net-website логическая последовательность, такая как: Новый, Открыт, Выполняется, Завершено, Утверждено, Закрыто. В 9X_asp-net этом случае вы можете добавить столбец в 9X_c#.net таблицу базы данных, чтобы явно установить 9X_asp.net порядок сортировки. Назовите его как-нибудь 9X_asp-net вроде SortOrder или DisplaySortOrder. Затем 9X_visual-c# в вашем SQL вы должны ЗАКАЗАТЬ ПО полю порядка 9X_visual-c# сортировки (без извлечения этого поля).

1
0

Ответ #10

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

Какие объекты вы используете для привязки 9X_.cs-file данных? Обычно я использую Collection , List или Queue (в зависимости от обстоятельств). Их относительно легко отсортировать с помощью настраиваемого делегата. См. MSDN documentation on the Comparison(T) delegate.

1
0

Ответ #11

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

var list = ddl.Items.Cast().OrderBy(x => x.Text).ToList();

ddl.DataSource = list;
ddl.DataTextField = "Text";
ddl.DataValueField = "Value"; 
ddl.DataBind();

9X_drop-down-menu

1
0

Ответ #12

Ответ на вопрос: Сортировка DropDownList? - C#, ASP.NET

Попробуйте

------- Процедура хранения ----- (SQL)

USE [Your Database]
GO


CRATE PROC [dbo].[GetAllDataByID]

@ID int


AS
BEGIN
        SELECT * FROM Your_Table
        WHERE ID=@ID
        ORDER BY Your_ColumnName 
END

---------- Default.aspx 9X_c#.net ---------


--------- Default.aspx.cs -------

protected void Page_Load(object sender, EventArgs e)

{

      if (!IsPostBack)
            {
                List table= new List();

                YourtableRepository tableRepo = new YourtableRepository();

                int conuntryInfoID=1;

                table= tableRepo.GetAllDataByID(ID);

                ddlYourTable.DataSource = stateInfo;
                ddlYourTable.DataTextField = "Your_ColumnName";
                ddlYourTable.DataValueField = "ID";
                ddlYourTable.DataBind();

            }
        }

------- Вспомогательный 9X_visual-c# класс LINQ ----

public class TableRepository

   {

        string connstr;

        public TableRepository() 
        {
            connstr = Settings.Default.YourTableConnectionString.ToString();
        }

        public List GetAllDataByID(int ID)
        {
            List table= new List();
            using (YourTableDBDataContext dc = new YourTableDBDataContext ())
            {
                table= dc.GetAllDataByID(ID).ToList();
            }
            return table;
        }
    }

1
0