DropDownList根据下拉项的Text排序

有时候刚好表中没有可以排序的字段,又不想修改表结构,但它的项文本有序号,这时就可以用这方法排序,例如:

测试页Default2.aspx:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DropDownList runat="server" ID="ddlType">    
    </asp:DropDownList>
    <asp:Button runat="server" ID="btnSort" onclick="btnSort_Click" Text="排序" />
    </div>
    </form>
</body>
</html>

 Default2.aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ddlType.Items.Add(new ListItem("--请选择--"));
            ddlType.Items.Add(new ListItem("2_bb"));
            ddlType.Items.Add(new ListItem("1_aa"));
            ddlType.Items.Add(new ListItem("4_ee"));
            ddlType.Items.Add(new ListItem("3_dd"));           
        }
    }
    protected void btnSort_Click(object sender, EventArgs e)
    {
        DropDownListBubbleSort(ddlType);
        //DropDownListSelectionSort(ddlType);
    }
    /// <summary>
    /// 冒泡排序
    /// </summary>
    /// <param name="ddl"></param>
    public void DropDownListBubbleSort(DropDownList ddl)
    {
        ListItem listItem = new ListItem();
        for (int i = 0; i < ddl.Items.Count; i++)
        {
            for (int j = i + 1; j < ddl.Items.Count; j++)
            {
                int firstVal = 0, nextVal = 0;
                int.TryParse(Regex.Replace(ddl.Items[i].Text, @"\D", @"", RegexOptions.IgnoreCase), out firstVal);
                int.TryParse(Regex.Replace(ddl.Items[j].Text, @"\D", @"", RegexOptions.IgnoreCase), out nextVal);
                if (firstVal == 0 || nextVal == 0)
                    continue;
                if (firstVal > nextVal)
                {
                    listItem = ddl.Items[j];
                    ddl.Items.Remove(ddl.Items[j]);
                    ddl.Items.Insert(i, listItem);
                }
            }
        }
    }
    /// <summary>
    /// 选择排序
    /// </summary>
    /// <param name="ddl"></param>
    public void DropDownListSelectionSort(DropDownList ddl)
    {
        ListItem listItem = new ListItem();
        int length = ddl.Items.Count;
        for (int i = 0; i < length; i++)
        {
            int min = 0;
            int.TryParse(Regex.Replace(ddl.Items[i].Text, @"\D", @"", RegexOptions.IgnoreCase), out min);
            if (min == 0)
                continue;

            int minIndex = i;
            for (int j = i + 1; j < length; j++)
            {
                int nextVal = 0;
                int.TryParse(Regex.Replace(ddl.Items[j].Text, @"\D", @"", RegexOptions.IgnoreCase), out nextVal);
                if (nextVal == 0)
                    continue;
                if (min > nextVal)
                {
                    min = nextVal;
                    minIndex = j;
                }
            }
            if (minIndex != i)
            {
                listItem = ddl.Items[minIndex];
                ddl.Items.Remove(ddl.Items[minIndex]);
                ddl.Items.Insert(i, listItem);
            }
        }     
    }
    
}
原文地址:https://www.cnblogs.com/gdjlc/p/2844603.html