現在、SQL Server からデータを取得し、DataTable に格納しています。DataGrid にさまざまな形式でテーブルを表示するために、その DataTable に GroupBy 操作を適用しています。サブ DataTables を作成した後、DataView に配置して DataTable を並べ替えています。DataView を並べ替えた後、DataGridView にバインドしています。しかし問題は、GroupBy によって作成された行が正しくソートされていないことです。
これに対する解決策を得ることができますか?
これが DataView GroupBy コードです。
DataView view = new DataView(dtfullreport); // Datatable to dataview.
var drdatedisp = from row in dtfullreport.AsEnumerable()
group row by row.Field<string>("Order_Date") into g
select new
{
Order_Date = g.Key,
totalQnty = g.Sum(a => a.Field<int>("Item_Quantity")),
totalTax = g.Sum(a => float.Parse(a.Field<decimal>("TAXAMT").ToString())),
totalAmt = g.Sum(a => float.Parse(a.Field<decimal>("VALAMT").ToString()))
};
DataTable dtdatedisp = new DataTable();
dtdatedisp.Columns.Add("Order_Date");
dtdatedisp.Columns.Add("Item_Quantity");
dtdatedisp.Columns.Add("TAXAMT");
dtdatedisp.Columns.Add("VALAMT");
dtdatedisp.Rows.Clear();
foreach (var g in drdatedisp)
{
DataRow newRow1 = dtdatedisp.NewRow();
newRow1[0] = g.Order_Date;
newRow1[1] = g.totalQnty;
newRow1[2] = String.Format("{0:0.00}", g.totalTax);
newRow1[3] = String.Format("{0:0.00}", g.totalAmt);
dtdatedisp.Rows.Add(newRow1);
}
DataView をグループ化して DataTable に配置した後、DataTable を並べ替えています
これがソートコードです。これは、GridView Sorting Event に記述されます。
string sortingDirection = string.Empty;
if (dir == SortDirection.Ascending)
{
dir = SortDirection.Descending;
sortingDirection = "Desc";
}
else
{
dir = SortDirection.Ascending;
sortingDirection = "Asc";
}
DataView sortedView = new DataView((DataTable)ViewState["dtdatedisp"]);
sortedView.Sort = e.SortExpression + " " + sortingDirection;
gv_reports_date.DataSource = sortedView; // Gridview datasource and binding
gv_reports_date.DataBind();
Order_Date 列に基づいて並べ替えていますが、DataView を降順で並べ替えた後、出力は次のようになります。
グループ化前のデータテーブル
並べ替え前のデフォルト ビュー。(データベースの日付に従ってソートされます)。
販売数量の降順にソート後。
販売数量の昇順でソートした後。
グループ化された行が正しいソート順で表示されない