在运行时重新排列Datatable行

时间:2013-10-21 08:09:38

标签: c# asp.net gridview datatable

我在数据表中有多行,请参阅下面的示例:

现有表

Name        Date         Value        Type

ABC(I)         11/11/2013   12.36      I
DEF(I)         11/11/2013   1          I
GHI(I)          -do-        -do-       I
JKL(P)                                 P
MNO(P)                                 P
PQR(D)                                 D
STU(D)          -d0-        -do-       D

必填表

Name        Date         Value        Type

JKL(P)                                 P
MNO(P)                                 P
PQR(D)                                 D
STU(D)          -d0-        -do-       D
ABC(I)         11/11/2013   12.36      I
DEF(I)         11/11/2013   1          I
GHI(I)          -do-        -do-       I

使用的编辑

排序应根据列类型。现在我需要在gridview中显示行的顺序进行小的更改。这是付款行将首先到达所有会费,最后所有兴趣类型将来。

我尝试了什么:

  1. 对列进行排序,但这不是我需要的。
  2. Tim Schmelter建议的自定义分组here
  3. 代码是:

    public DataTable GroupBy(string i_sGroupByColumn, string i_sAggregateColumn, DataTable i_dSourceTable)
    {
    
        DataView dv = new DataView(i_dSourceTable);
    
        //getting distinct values for group column
        DataTable dtGroup = dv.ToTable(true, new string[] { i_sGroupByColumn });
    
        //adding column for the row count
        dtGroup.Columns.Add("Count", typeof(int));
    
        //looping thru distinct values for the group, counting
        foreach (DataRow dr in dtGroup.Rows) {
            dr["Count"] = i_dSourceTable.Compute("Count(" + i_sAggregateColumn + ")", i_sGroupByColumn + " = '" + dr[i_sGroupByColumn] + "'");
        }
    
        //returning grouped/counted result
        return dtGroup;
    }
    

    我不知道我缺少/缺少的地方和地点。请帮助。

2 个答案:

答案 0 :(得分:1)

尝试使用linq订购你的桌子:

var query = dtGroup.AsEnumerable()
           .OrderBy(c=> c.Field<DateTime?>("Date"))
           .ThenByDescending(c=> c.Field<string>("Name"));
DataView dv2   = query.AsDataView(); 

答案 1 :(得分:1)

如果我理解正确,你首先要对P,D,I进行排序,然后再进行日期

    Dictionary<string, int> sortDictionary = new Dictionary<string, int>();
    sortDictionary.Add("P", 1);
    sortDictionary.Add("D", 2);
    sortDictionary.Add("I", 3);


    var q = from row in dtGroup.AsEnumerable()
            let type = sortDictionary[row.Field<string>("Name").Substring(4, 1)]
            orderby type, row.Field<string>("Name")
            select row;

    foreach (var r in q)
    {
        string x = r["Name"].ToString() + r["Date"].ToString();
    }