DropDownList根据下拉项的Text文本序号排序

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

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);

  }

  }

  }

  }