GridView.Controls[0]是什麼意思?......大腸包小腸、GridView自訂表頭都會用到這一段。

摘要:GridView.Controls[0]是什麼意思?......大腸包小腸、GridView自訂表頭都會用到這一段。





 

 

GridView.Controls[0]是什麼意思?......大腸包小腸、GridView自訂表頭都會用到這一段。


所謂的  巢狀GridView(父子GridView、母子GridView)
最早源自  黃忠成老師分享的範例

請看:GridView裡面,再次包含另一個小的GridView?
 http://social.msdn.microsoft.com/forums/zh-TW/236/thread/e86e0fc4-0565-44d2-915d-dac2acb94c87/

 

我日前在 MSDN論壇的疑問如下:
==========================================

黃老師的程式碼裡面有這一段

 
    //建立展開列明細的函式
     private void CreateDetailRow(GridViewRow gridRow)
     {
         if (RowIsCollasped(gridRow))
         {
             //建立GridViewRow,注意,此處傳入的是展開列,
 
            //我們暫時將RowIndex設成與展開列相同.
             GridViewRow row = new GridViewRow(gridRow.RowIndex, -1,
 
                 DataControlRowType.DataRow, DataControlRowState.Normal);
             //架構上,GridViewRow是一個Table,此處於此Table中建立兩個Cell.
             //加入第一個Cell可以做出空一格的效果,不會讓新建的GridViewRow
 
            //與原來的列起始位置
 
            //相同,營造出新建的GridViewRow看起來是主列的子表
             TableCell cell = new TableCell();
             row.Cells.Add(cell);
             //加入第二個Cell,此Cell是用來顯示DetailGrid.ascx,請注意,
 
            //Colspan設為Columns.Count-1,也就是合併所有Cell.
             TableCell cell2 = new TableCell();
             cell2.Attributes["colspan"] = (GridView1.Columns.Count - 1).ToString();
             Control c = LoadControl("DetailsGrid.ascx");
             ((DetailsGrid)c).OrderID = (int)GridView1.DataKeys[gridRow.RowIndex].Value;
             cell2.Controls.Add(c);
             row.Cells.Add(cell2);
             //將新建的GridViewRow加到GridView中,注意!此列將插入於展開列的下方
 
            //(+2 的原因是包含Header Row)
             GridView1.Controls[0].Controls.AddAt(gridRow.RowIndex + 2, row);
         }
     }
 


最後一句的程式碼

GridView1.Controls[0].Controls.AddAt(gridRow.RowIndex + 2, row);

我當年提出疑問,未曾得到回答

至今仍希望前輩們能夠解惑,謝謝大家

 

市面上,常常看見的 GridView自訂表頭,自己增加表頭的一列....

例如:http://pramaire.pixnet.net/blog/post/28100706-gridview%E6%A8%99%E9%A1%8C%28%E8%A1%A8%E9%A0%AD%29%E5%90%88%E4%BD%B5

最後也有這麼一段相同的程式碼


==========================================
 

 



在一位前輩的指點下,我大概知道這段程式碼的用意了。

前輩說:「GridView1.Controls[0]是指Table,
                                  它包含了header,footer,pager等」

                  
 

本範例收錄在「ASP.NET專題實務(I)」,上集 第十一章

強烈建議您,花時間瞭解 GridView的 RowCreated與  RowDataBound這兩個事件之後,才能作下去

 

 

 

我在這段程式底下,用這兩段程式來測試:



(1)  Response.Write(GridView1.Controls[0].ClientID)

      答案是 GridView1_Ctl00

      跟下面圖片一樣(執行成果的HTML原始檔)

     

 


(2).  Response.Write(GridView1.Controls[0].ToString())


      答案是System.Web.UI.WebControls.ChildTable
 

的確也觀察到相同的效果

在家沒有Visual Studio,找文件也沒法體會

自己寫一點Code觀察,加上跟高手討論,就比較明朗了。

 

 

補  充:

http://www.wretch.cc/blog/kivencco/12694619
這位前輩寫了這樣的程式 -- GridView1.Controls[0].Controls[0].Controls[0].Controls.Add(TextBox);

有興趣的朋友,可以自己去研究一下

 

 

 

至於後續的程式

.Controls.Add()方法
.Controls.AddAt()方法

就相對簡單很多,在此不說明了。謝謝。

 

****************************************************************************

關於 .Controls集合、.FindControl()方法
都是很重要的觀念與技巧。

書本「上集」第十章有完整的說明與範例,請勿錯過。
****************************************************************************

您手邊的「入門書」有講解到這些東西嗎?

他怎麼帶您走過這段荊棘的路程?
還是.....有些範例有用到這些程式碼,就算沾到邊了?

 

您要學會他?還是打個照面就算了?

底下的兩本新書,在這邊的教學範例上,比以前的兩版有更多改進 ......

 

 

 

 

 

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

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

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



ASP.NET遠距教學、線上課程(Web Form + MVC)。 第二門 課程「四折」-- 以MVC課程 作優惠。
第一天課程, "完整" 試聽。  如不滿意  全額退費!
................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ

*********************************************************************************************

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

************************************************************(歡迎索取,免費申請)*****

 

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小時)完整內容,"免費"讓您評估

    MIS2000 Lab.  線上教學影片(YouTube) **免費觀賞**