2012-08-10 94 views
1

正確排序我目前正在從SQL Server獲取數據並存儲在DataTable中。我在該DataTable上應用GroupBy操作,以便在DataGrid中以各種形式顯示錶。在創建子數據表後,我通過放置DataView來排序DataTable。排序DataView後,我將它綁定到DataGridView。但問題在於由GroupBy製作的行沒有正確排序DataView不正確排序DataTable 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); 
      } 

分組的數據視圖和數據表在放置後,我整理數據表

這裏是分類編碼。 這將寫入GridView排序事件。

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的列,但排序按降序 的數據視圖後分類,但輸出是,在排序前分組

enter image description here

默認視圖前

數據表。 (根據數據庫中的日期排序)。

enter image description here

在降序售出數量的順序排序後。

enter image description here

在售出數量的升序排序後。

enter image description here

這些分組的行不被顯示在正確的排序

+0

對不起影像不顯示 – 2012-08-10 06:10:07

回答

4

答案很簡單。如果您沒有爲已排序的DataTable中的列提供類型,則會假定爲字符串,並且生成的排序是字典排序。

如果按照整數排序,則數字10,6,30將按{6,10,30}排序,但如果按字符串排序則按照 {10,30,6}排序。

變化:

DataTable dtdatedisp = new DataTable(); 
dtdatedisp.Columns.Add("Order_Date"); 
dtdatedisp.Columns.Add("Item_Quantity"); 
dtdatedisp.Columns.Add("TAXAMT"); 
dtdatedisp.Columns.Add("VALAMT"); 

到:

DataTable dtdatedisp = new DataTable(); 
dtdatedisp.Columns.Add("Order_Date", typeof(DateTime)); 
dtdatedisp.Columns.Add("Item_Quantity", typeof(int)); 
dtdatedisp.Columns.Add("TAXAMT", typeof(decimal)); 
dtdatedisp.Columns.Add("VALAMT", typeof(decimal)); 

...,它應該開始工作。

Here你可以閱讀更多關於添加列在計算器一個DataTable

+0

如果我這樣做的日期時間成爲一個問題。有什麼可以替代這個 – 2012-08-14 05:14:24

+0

DateTime成爲一個問題如何? – 2012-08-14 10:38:43

+0

由於我將日期時間轉換成字符串,它說datetime不能從字符串轉換。如果我沒有將日期時間轉換爲字符串,那麼日期時間顯示格式不正確 – 2012-08-14 10:44:12