上集 Ch.10 -- .Controls() / .Controls[]的補充範例 #2 -- 轉成樣版(Template)以後

摘要:上集 Ch.10 -- .Controls() / .Controls[]的補充範例 #2 -- 轉成樣版(Template)以後





 

 

請看完上一篇文章,上集 Ch.10 -- .Controls() / .Controls[]的補充範例 #1

再來繼續下去

 

 

上一篇文章的範例

HTML設計畫面中, GridView(完全沒有任何改造) + SqlDataSource

 

但在這個範例中,

我把 GridView的「欄位」都轉成樣版(Template)

 

轉成樣版以後,每一格子裡面的「子控制項」都會出現,而且有獨一無二的 ID

我們透過 .FindControl()方法就很好抓取這些「子控制項」

這些在書本「上集」第十章 已經說明得很清楚囉

 

 

GridView的欄位,轉成樣版以後

我故意用 Controls() / Controls[] 來抓取子控制項

會發生什麼成果呢?

 

請看以下的程式碼,故意寫在 Page_Load事件裡面

 

    protected void Page_Load(object sender, EventArgs e)
    {
        Label3.Text = "<h3>第二個GridView(轉成樣版)</h3>";
        for (int j = 0; j < 3; j++)
        {
            if (GridView2.Rows[1].Cells[j].HasControls())
            {
                Label3.Text += "<hr />第二列的" + j + "個格子(Cells)有" + GridView2.Rows[1].Cells[j].Controls.Count.ToString() + "個子控制項(Controls)<br />";
            }
            else
            {
                Label3.Text += "第二列的" + j + "個格子(Cells) is No Controls<br /><br />";
            }
        }

        LiteralControl lb0 = (LiteralControl)GridView2.Rows[1].Cells[2].Controls[0];
        Label3.Text += "<br />.....第二列的第三個格子(Cells),.Controls[0]集合有" + lb0.Text + "<br />";
        //--任何不在伺服器上處理的 HTML 標記或文字字串,都會被視為 LiteralControl 物件。
        //--參考網址  http://msdn.microsoft.com/zh-tw/library/system.web.ui.control.controls%28v=vs.80%29


        Label lb1 = (Label)GridView2.Rows[1].Cells[2].Controls[1];
        Label3.Text += "<br />.....第二列的第三個格子(Cells),.Controls[1]集合有" + lb1.Text + "<br />";

        LiteralControl lb2 = (LiteralControl)GridView2.Rows[1].Cells[2].Controls[2];
        Label3.Text += "<br />.....第二列的第三個格子(Cells),.Controls[2]集合有" + lb2.Text + "<br />";

        //== 本範例來說,子控制項最多只有三個。超過三個就會報錯!
        // LiteralControl lb3 = (LiteralControl)GridView2.Rows[1].Cells[2]
.Controls[3];
        // Label3.Text += "<br />.....第二列的第三個格子(Cells),.Controls[3]集合有" + lb3.Text + "<br />";


        Label3.Text += "<br><br>====GridView2的第二列有幾個子控制項?==GridView2.Rows[1].Controls.Count====" + GridView2.Rows[1].Controls.Count.ToString() + "====<br /><br />";


        Label lbFD = (Label)GridView2.Rows[1].Cells[2].FindControl("Label2");
        Label3.Text += "<br> .FindControl()方法 --" + lbFD.Text;
    }

 

 

 

執行成果如下:

     

 

從上圖的執行成果來看

把 Gridview的欄位,轉成樣版以後

 

第三個格子為例,我用 .Controls() / .Controls[]集合去抓取,竟然出現三個子控制項呢?

第一個是  LiteralControl

第二個才是 Label控制項

第三個是  LiteralControl

 

很有趣吧!

 

當然,這些範例如果寫在 GridView的「更新」按鈕,觸發的 RowUpdating事件

就沒有這麼多問題,一切正常

 

請看書本「上集」第十章的解說

 

 

 

 

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程,遠距教學 (Web Form 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


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

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

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