我有一个数据表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_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();
}
答案 0 :(得分:0)
dv.Sort
是一个字符串,其中包含列名,后跟" ASC" (升序)或" DESC" (降序)。如果您的示例中的"Amount"
是您要对数据进行排序的列名,则可以尝试此dv.Sort = "Amount ASC"
答案 1 :(得分:0)
您的DataView需要Custom Comparer
。默认情况下,sort of DataView compare strings
和字符16
位于5
之前。
这是您可以按int
的{{1}}值按升序排序的方式:
CalculatedPriceWithNoSymbol
答案 2 :(得分:0)
如果你的Amount
列是一个字符串,那么它奇怪地整理成一个字符串。考虑将其转换为decimal
或int
:如果您这样做,它会按照您的预期进行整理。