台灣最大程式設計社群網站
線上人數
2369
 
會員總數:241128
討論主題:186801
歡迎您免費加入會員
討論區列表 >> Blog精華文章 >> GridView資料正反排序,合計永遠在最後一筆
[ 變換順序 ]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
GridView資料正反排序,合計永遠在最後一筆
價值 : 0 QP  點閱數:1212 回應數:0

樓主

Mark Shu 版主
中級顧問
41971 589
14969 3773
發送站內信

捐贈 VP 給 Mark Shu

當GridView控制項繫結資料後, 若某個欄位需要正反向排序,是個很常見的功能 ,但是,若來源資料經過StoredProcedure組合過,所以在所有的資料最後一列會有個合計的資料列,當bind資料後 ,合計欄位會在最後一列, 若有分頁, 合計欄位會在最後一頁的最後一筆, 但若是欄位可以正反向排序, 則當反向排序時,變成合計欄位出現在第一筆, 就會出現問題

因此要做的是: 當排序事件時, 要將合計那一列抓出來,然後將剩下的資料排序, 最後將排序後的資料加在最後一列,如此無論正反向排序後,合計欄位永遠出現在最後一筆,而不會出現在第一筆, 主要在於Sorting事件中,要去加工...

protected void gv_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dt = Session["dt_gv3"] as DataTable;
object[] obj = dt.Select("ID = '合計'")[0].ItemArray;

dt.Rows.RemoveAt(dt.Rows.Count - 1);
dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection2(e.SortExpression);
DataView dv = dt.DefaultView;

DataTable dt2 = dv.ToTable();

DataRow dwNew = dt2.NewRow();
dwNew.ItemArray = obj;

dt2.Rows.InsertAt(dwNew, dt.Rows.Count);

Session["dt_gv3"] = dt2;
//Session["dv_gv3"] = dv;
gv3.DataSource = dt2;
gv3.DataBind();
}

 

private string GetSortDirection2(string column)
{
string sortDirection = "ASC";
string sortExpression = ViewState["SortExpression2"] as string;

if (sortExpression != null)
{
if (sortExpression == column)
{
string lastDirection = ViewState["SortDirection2"] as string;
if ((lastDirection != null) && (lastDirection == "ASC"))
{
sortDirection = "DESC";
}
}
}
ViewState["SortDirection2"] = sortDirection;
ViewState["SortExpression2"] = column;

return sortDirection;
}

而分頁事件中的資料來源,必須從Session["dt_gv3"] 中去取得

 


本篇文章發表於2013-09-04 21:56
== 簽名檔 ==
猛虎別在當道臥,困龍也有上天時。


別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
[ 變換順序 ]   

回覆
如要回應,請先登入.