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
................ YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/
Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download
請看我們的「售後服務」範圍(嚴格認定)。
......................................................................................................................................................
事先錄製好的影片,並非上課時側錄! 觀看影片時,有如我「一對一」跟您面對面講課。

累積時數約 75~ 88小時...... 第一天(5.5小時)完整內容,"免費"讓您評估
