摘要: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自訂表頭,自己增加表頭的一列....
最後也有這麼一段相同的程式碼
==========================================
在一位前輩的指點下,我大概知道這段程式碼的用意了。
前輩說:「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
線上課程教學,遠距教學 (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
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
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 MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽
[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。