按数字排序数据表不是按字母顺序排序

时间:2013-09-19 17:45:54

标签: 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_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();
    }

3 个答案:

答案 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列是一个字符串,那么它奇怪地整理成一个字符串。考虑将其转换为decimalint:如果您这样做,它会按照您的预期进行整理。