1

データテーブルに複数の行があります。以下のサンプルを参照してください。

既存のテーブル

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

使用条件

並べ替えは、列の種類に従って行う必要があります。ここで、グリッドビューに表示される行の順序を少し変更する必要があります。つまり、Payment の行が最初に表示され、次にすべての Dues が表示され、最後にすべての Interests タイプが表示されます。

私が試したこと:

  1. 列の並べ替えですが、必要なものではありませんでした。
  2. ここでTim Schmelterが提案したカスタムグループ化

コードは次のとおりです。

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;
}

どこに何が欠けている/欠けているのかわかりません。親切に助けてください。

4

2 に答える 2

1

あなたのテーブルを注文するためにlinqを試してください:

var query = dtGroup.AsEnumerable()
           .OrderBy(c=> c.Field<DateTime?>("Date"))
           .ThenByDescending(c=> c.Field<string>("Name"));
DataView dv2   = query.AsDataView(); 
于 2013-10-21T08:34:11.063 に答える
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();
    }
于 2013-10-21T08:59:15.730 に答える