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

时间:2022-09-25 19:49:37

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

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