iT邦幫忙

0

GridView的 PreRender事件與 RowCreated、RowDataBound事件大亂鬥

同一個範例,用「不同作法」營造出「相同成果」應該是最好的比較方式。
範例一,成績不及格者(不到六十分),出現紅字
範例二,複選 GridView+CheckBox,批次刪除

文章與範例在此 -- www.dotblogs.com.tw/mis2000lab/archive/2015/10/30/gridview_prerender_rowcreated_rowdatabound_2015.aspx

這次我增加 YouTube影片教學
現在有同一個範例,用「不同作法」營造出「相同成果」應該是最好的比較方式。

題目:計算每一頁的學生數學成績(加總、累加)統計總分

先從簡單的講起:
第一,GridView的 PreRender事件
來看 MSDN網站的說明
控制項的 PreRender事件...... 在 Control 物件載入之後 但在呈現之前發生。

當GridView已經成形,在「呈現到畫面」之前,我們動手最後一次修改
如同這個產品 "已經"生產出來(已經離開生產線),在給人看見之前,我最後一次擦亮他

所以,我們跑 for迴圈把本頁的每一列、每一筆記錄的數學成績 ( GV_Row.Cells[5].Text) 加總起來。

第二,GridView的 RowDataBound事件
這個事件比較難一點點,不自己動手做就不會弄清楚
** RowCreated事件執行時間比RowDataBound事件早!
** 這個事件就是一個「自己跑 for迴圈」「自動跑 for迴圈」的事件

當GridView是在這個事件裡面,慢慢被產生出來的
每一列的標題、每一列的紀錄......都是這個事件 "逐步" 生產出來的

簡言之,這個事件是就「生產線」,GridView表格就是從這兩個事件被生產成形的

所以,「不需要」 for迴圈把本頁的每一列、每一筆記錄的數學成績 ( e.Row.Cells[5].Text) 加總起來。

因為他正在「產生」每一列.....我們讓他自己跑 for迴圈,讓他自己產生,我在旁邊等

生產線「每產生一列」,我就拿起數據加總一次

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//== 通常都會搭配這幾段 if 判別式
if (e.Row.RowType == DataControlRowType.Header)
{ //-- 只有 GridView呈現「表頭」列的時候,才會執行這裡!
Response.Write("「表頭」列 DataControlRowType.Header <br />");
}

if (e.Row.RowType == DataControlRowType.DataRow)
{ //-- 當 GridView呈現「每一列」資料列(記錄)的時候,才會執行這裡!
//-- 所以這裡就像迴圈一樣,會反覆執行喔!!
Response.Write("「每一列」資料列(記錄) DataControlRowType.DataRow <br />");
}

}

後續還有一則YouTube影片教學https://youtu.be/SahEqQ8-heI

完整文章與 最後的範例下載,請看:http://www.dotblogs.com.tw/mis2000lab/archive/2015/10/30/gridview\_prerender\_rowcreated\_rowdatabound\_2015.aspx


尚未有邦友留言

立即登入留言