ASP.NET 4.5專題實務(I)--入門實戰篇(松崗出版)
第十一章送的範例, GridView RowDataBound事件的七個小範例
讀者來信詢問,
想要做的功能,圖片上方有講:
第一,在Gridview樣板裡面,按下「編輯」之後,這一列動態加入 CheckBox控制項
第二,User勾選 CheckBox的值,可以抓的到

寫在GridView RowDataBound事件裡面
(RowUpdating事件底下有一段程式,我註解掉了,那段可運作,可抓到)
程式碼如下:
(注意!GridView又是「隔列換色(Alternating)」、又要進入「編輯(Edit)」模式,這裡的程式有點怪!)
=== C# =================================================================================
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//重點!!改用 RowCreated事件就成功了
if (e.Row.RowType == DataControlRowType.DataRow) {
//***下列程式,請參閱上集Ch.11 範例GridView_RowDataBound_6_CaseStudy.aspx。***(start)
if (e.Row.RowState == DataControlRowState.Edit ||
e.Row.RowState == (DataControlRowState.Edit | DataControlRowState.Alternate)) //**注意這裡!!or 的用法不同,分別是「||」與「|」。
{
CheckBox CB = new CheckBox();
CB.ID = "DynaAdd_CB1";
CB.Text = "請選我";
e.Row.Cells[2].Controls.Add(CB);
//Response.Write("<h3>" + CB.UniqueID + "</h3>"); //測試用
}
//*********************************************************************(end)
}
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{ //*** 按下「更新」按鈕。 ***
CheckBox CB = (CheckBox)GridView1.Rows[e.RowIndex].FindControl("DynaAdd_CB1");
Response.Write("<h3>" + CB.Checked.ToString() + "</h3>");
Response.End(); //抓不到,因為PostBack的緣故。
//*** 另一種作法(可抓到值)************************************** //測試用
//Response.Write("<h3>" + (e.RowIndex + 2).ToString() + "</h3>");
//Response.End();
//if ((e.RowIndex + 2) < 10) {
// Response.Write("<h3>" + Request["GridView1$ctl0" + (e.RowIndex + 2).ToString() + "$DynaAdd_CB1"] + "</h3>");
// //有勾選的話,就會出現「on」字樣
//}
//else {
// Response.Write("<h3>" + Request["GridView1$ctl" + (e.RowIndex + 2).ToString() + "$DynaAdd_CB1"] + "</h3>");
// //有勾選的話,就會出現「on」字樣
//}
//Response.End();
}
=== VB 語法 =================================================================================
Protected Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound
'重點!!改用 RowCreated事件就成功了
If e.Row.RowType = DataControlRowType.DataRow Then
'*** 下列程式,請參閱上集Ch.11 範例GridView_RowDataBound_6_CaseStudy.aspx。***(start)
'*** 重點!既是「偶數列(Alternate)」、又進入編輯模式。
If e.Row.RowState = DataControlRowState.Edit Or
(e.Row.RowState = (DataControlRowState.Edit Or DataControlRowState.Alternate)) Then
Dim CB As CheckBox = New CheckBox()
CB.ID = "DynaAdd_CB1"
CB.Text = "請選我"
e.Row.Cells(2).Controls.Add(CB)
' Response.Write("<h3>" & CB.UniqueID & "</h3>") ' 測試用
End If
End If
'*********************************************************************(end)
End Sub
Protected Sub GridView1_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles GridView1.RowUpdating
'*** 按下「更新」按鈕。 ***
Dim CB As CheckBox = GridView1.Rows(e.RowIndex).FindControl("DynaAdd_CB1")
Response.Write("<h3>" & CB.Checked.ToString() & "</h3>")
Response.End() ' 抓不到,因為PostBack的緣故。
''*** 另一種作法(可抓到值)************************************** ' ''測試用
'Response.Write("<h3>" & (e.RowIndex + 2).ToString() & "</h3>")
'Response.End();
'If ((e.RowIndex + 2) < 10) Then
' Response.Write("<h3>" & Request("GridView1$ctl0" & (e.RowIndex + 2).ToString() & "$DynaAdd_CB1") & "</h3>")
' '有勾選的話,就會出現「on」字樣
'Else
' Response.Write("<h3>" & Request("GridView1$ctl" & (e.RowIndex + 2).ToString() & "$DynaAdd_CB1") & "</h3>")
' '有勾選的話,就會出現「on」字樣 '
'End If
'Response.End()
End Sub
執行時出現錯誤「並未將物件參考設定為物件的執行個體。 」
簡單的說,抓不到這個「動態加入的CheckBox控制項」
想想看,改成寫在GridView RowCreated事件裡面就會成功。
為什麼?
請看我的書本上集
ASP.NET 專題實務 (I) --入門實戰篇(松崗出版)
第十一章送的範例, GridView RowDataBound事件的七個小範例
我第一次其實也愣住了,
幸好有一位前輩出手才讓我醒過來
而且也更認識 RowDataBound與RowCreated事件 兩者的差異
答案在這裡有講
http://www.allenkuo.com/EBook5/view.aspx?a=1&TreeNodeID=82&id=1373
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。
......... facebook社團 https://www.facebook.com/mis2000lab ......................
......... YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/
Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download
請看我們的「售後服務」範圍(嚴格認定)。
......................................................................................................................................................

