有时候刚好表中没有可以排序的字段,又不想修改表结构,但它的项文本有序号,这时就可以用这方法排序,例如:
测试页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); } } } }