C# 根据数字而非字母顺序对数据表进行排序
我有一个数据表dt1:C# 根据数字而非字母顺序对数据表进行排序,c#,sorting,C#,Sorting,我有一个数据表dt1: Name Amount ---- ----- A 10 B 15 C 5 D 22 E 16 F 30 G 31 在c#中,我希望根据下拉框中的用户选择,根据从低到高或从低到高对数据进行排序。我正在使用这个函数,但它总是按字母顺序排序,如10,15,16,22,30,31,5。任何人都可以告诉我应该用什么来排序数据 protected void ddlHotelAPISearchBoxSorting_Select
Name Amount
---- -----
A 10
B 15
C 5
D 22
E 16
F 30
G 31
在c#中,我希望根据下拉框中的用户选择,根据从低到高或从低到高对数据进行排序。我正在使用这个函数,但它总是按字母顺序排序,如10,15,16,22,30,31,5。任何人都可以告诉我应该用什么来排序数据
protected void ddlHotelAPISearchBoxSorting_SelectedIndexChanged(object sender, EventArgs e)
{
DataTable dt2 = new DataTable();
dt2 = dt1;
DataView dv = new DataView(dt1);
if (ddlHotelAPISearchBoxSorting.SelectedValue == "Low_Price_First")
{
//dt2.DefaultView.Sort = "CalculatedPrice ASC";
dv.Sort = "CalculatedPriceWithNoSymbol ASC";
}
else if (ddlHotelAPISearchBoxSorting.SelectedValue == "High_Price_First")
{
dv.Sort = "CalculatedPriceWithNoSymbol DESC";
}
else if (ddlHotelAPISearchBoxSorting.SelectedValue == "Best_Match")
{
}
DataList1.DataSource = dv.ToTable();
DataList1.DataBind();
}
dv.Sort
是一个字符串,包含列名,后跟“ASC”(升序)或“DESC”(降序)。如果示例中的“Amount”
是要按其对数据进行排序的列名,则可以尝试此dv.sort=“Amount ASC”
您需要一个用于数据视图的自定义比较器。默认情况下,数据视图排序比较字符串
,对于字符串,16
位于5
之前
这是您如何使用NoSymbol按CalculatedPrice的int
值升序排序的方法:
DataTable dt2 = new DataTable();
// Create temporary list to sort rows by int value.
List<DataRow> rows = new List<DataRow>();
foreach (DataRow row in table.Rows)
{
rows.Add(row);
}
// Sort list in ascending order
rows.Sort(delegate(DataRow row1, DataRow row2)
{
return ((int)row1["CalculatedPriceWithNoSymbol"])
.CompareTo(((int)row2["CalculatedPriceWithNoSymbol"]));
});
// Add sorted rows back to datatable.
foreach (DataRow row in rows)
{
dt2.Rows.Add(row.ItemArray);
}
DataList1.DataSource = dt2;
DataList1.DataBind();
DataTable dt2=newdatatable();
//创建临时列表以按int值对行进行排序。
列表行=新列表();
foreach(table.Rows中的DataRow行)
{
行。添加(行);
}
//按升序对列表进行排序
排序(委托(数据行第1行、数据行第2行)
{
返回((int)第1行[“CalculatedPriceWithNoSymbol”])
.与(((int)第2行[“计算价格不带符号]))相比;
});
//将已排序的行添加回datatable。
foreach(数据行中的行)
{
dt2.Rows.Add(row.ItemArray);
}
DataList1.DataSource=dt2;
DataList1.DataBind();
如果您的金额
列是一个字符串,那么奇怪的是,它作为字符串进行整理。考虑把它转换成代码>十进制< /代码>或<代码> int >代码>:如果您这样做,它将按照您的期望进行排序。是您的代码> CalculatedPriceWithNoSymbol < /代码>列作为字符串返回吗?我想这只是一个打印错误。即使这样,如果Amount是字符串数据类型,您的答案也不起作用。