对DropDownList进行排序? - C#,ASP.NET

scr*_*rot 34 c# asp.net drop-down-menu

我很好奇在C#/ ASP.NET中对DropDownList进行排序的最佳路线(更多关注简单性,而不是速度或效率) - 我已经看了一些建议,但他们没有点击我.

编辑:伙计们,我无法控制数据如何进入DropDownList - 我无法修改SQL.

Dil*_*e-O 23

如果您获得了包含数据的DataTable,则可以创建一个DataView,然后将下拉列表绑定到该数据.你的代码看起来像......

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

ddlOptions.DataSource = dvOptions;
ddlOptions.DataTextField = "Description";
ddlOptions.DataValueField = "Id";
ddlOptions.DataBind();
Run Code Online (Sandbox Code Playgroud)

您的文本字段和值字段选项将映射到您正在接收的数据表中的相应列.


Jam*_*ack 21

适用于.NET 3.5的AC#解决方案(需要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);
    }
Run Code Online (Sandbox Code Playgroud)

在绑定下拉列表后调用它,例如OnPreRender:

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        ddlMyDropDown.ReorderAlphabetized();
    }
Run Code Online (Sandbox Code Playgroud)

将其粘贴在实用程序库中以便于重复使用.


Saa*_*per 16

假设您正在运行最新版本的.Net Framework,这将起作用:

List<string> items = GetItemsFromSomewhere();
items.Sort((x, y) => string.Compare(x, y));
DropDownListId.DataSource = items;
DropDownListId.DataBind();
Run Code Online (Sandbox Code Playgroud)


Jim*_*Jim 11

DropDownList将任何IEnumerable作为DataSource.

只需使用LINQ对其进行排序.


Mus*_*sis 5

我通常使用数据库表中的值加载DropDownList,因此最简单的方法是使用SELECT语句的ORDER BY子句按需要对结果进行排序,然后仅遍历结果并将其转储到DropDownList中。

  • OP表示他无法修改用于填充此下拉菜单的SQL (4认同)