0

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

3 回答 3

0

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

于 2013-09-19T18:07:36.537 回答
0

您的 DataView 需要一个Custom Comparer。默认情况下sort of DataView compare strings,for 字符串165.

这是您可以按升序方式按int值排序的方式:CalculatedPriceWithNoSymbol

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();
于 2013-09-19T18:52:28.150 回答
0

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

于 2013-09-19T18:57:58.913 回答