【问题标题】:Sorting Datatable according to number not alphabetically根据数字而不是字母顺序对数据表进行排序
【发布时间】:2013-09-20 02:57:58
【问题描述】:

我有一个数据表 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();
    }

【问题讨论】:

  • 您的CalculatedPriceWithNoSymbol 列是否以字符串形式返回?

标签: c# sorting


【解决方案1】:

您的 DataView 需要 Custom Comparer。默认情况下sort of DataView compare strings 和字符串165 之前。

这是您可以按CalculatedPriceWithNoSymbolint 值升序排序的方法:

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

【讨论】:

    【解决方案2】:

    dv.Sort 是一个字符串,它包含列名后跟“ASC”(升序)或“DESC”(降序)。如果您的示例中的"Amount" 是您要对数据进行排序的列名,您可以试试这个dv.Sort = "Amount ASC"

    【讨论】:

    • 我猜这只是一个错字。即使这样,如果 Amount 是字符串数据类型,您的答案也将不起作用。
    【解决方案3】:

    如果您的 Amount 列是一个字符串,那么它会整理,奇怪的是,作为一个字符串。考虑将其转换为 decimalint:如果这样做,它将按照您的预期进行整理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      相关资源
      最近更新 更多