摘要:FormView動態加入 ItemTemplate #2 -- 動態產生 ItenTemplate樣版(負責創造 Template的 .InstantiateIn()方法)
建議您完成上一篇文章之後,再來繼續下去:
下面的重點:
1. 動態加入一個 Template。會用到 .InstantiateIn()方法
2. 在樣版裡面的 Web控制項也是動態加入的。所以要搭配的 [事件],EventHandler 也會動態給予。
VB ----
Dim Label1 As New Label()
Label1.ID = "Label1"
AddHandler Label1.DataBinding, AddressOf Label1_DataBinding
C# ----
Label Label1 = new Label();
Label1.ID = "Label1";
Label1.DataBinding += new EventHandler(Label1_DataBinding);
3. 因為要搭配 HTML畫面的 SqlDataSource,作 DataBinding。
所以 ItemTemplate樣版裡面的控制項,必須進行 DataBinding
..............................................................................................................................................................
VB
'-- 自己宣告 ----
Imports System.Data
'===========================透過類別,動態產生 ItenTemplate樣版 ==(Start) ==
'==資料來源:http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.formview.dataitem.aspx
'-- 動態加入一個 Template for FormView
Private NotInheritable Class MSDNTemplate
Implements ITemplate
'-- 負責創造 Template的 .InstantiateIn()方法
'-- 資料來源:http://msdn.microsoft.com/zh-tw/library/system.web.ui.itemplate.instantiatein(v=VS.100).aspx
'-- 當類別實作時,定義子控制項和樣板所屬的 Control 物件。這些子控制項依次定義在內嵌樣板內。
Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
'================================
'-- 動態產生 "樣版"裡面的「子控制項」,如:Label。
'================================
'-- 因為這些 Label必須搭配 SqlDataSource資料來源,進行 DataBinding,
'-- 所以必須為這些 Label搭配「DataBinding事件」。
Dim Label1 As New Label()
Label1.ID = "Label1"
AddHandler Label1.DataBinding, AddressOf Label1_DataBinding
'== 重點!!這個 Label1的 DataBinding事件,就寫在下面。
Dim lineBreak As LiteralControl = New LiteralControl("<br /><br />")
Dim Label2 As New Label()
Label2.ID = "Label2"
AddHandler Label2.DataBinding, AddressOf Label2_DataBinding
'== 重點!!這個 Label2的 DataBinding事件,就寫在下面。
'== 動態加入三個 Label控制項
container.Controls.Add(Label1)
container.Controls.Add(lineBreak)
container.Controls.Add(Label2)
End Sub
'**** Label1的 DataBinding事件。****
Private Sub Label1_DataBinding(ByVal sender As Object, ByVal e As EventArgs)
Dim id_LabelControl As Label = CType(sender, Label)
Dim formViewContainer As FormView = CType(id_LabelControl.NamingContainer, FormView)
Dim rowView As DataRowView = CType(formViewContainer.DataItem, DataRowView)
id_LabelControl.Text = rowView("id").ToString()
End Sub
'**** Label2的 DataBinding事件。****
Private Sub Label2_DataBinding(ByVal sender As Object, ByVal e As EventArgs)
Dim title_LabelControl As Label = CType(sender, Label)
Dim formViewContainer As FormView = CType(title_LabelControl.NamingContainer, FormView)
Dim rowView As DataRowView = CType(formViewContainer.DataItem, DataRowView)
title_LabelControl.Text = rowView("title").ToString()
title_LabelControl.Text &= "<hr />" & rowView("article").ToString()
End Sub
End Class
'=============================透過類別,動態產生 ItenTemplate樣版 ==(End) ==
..............................................................................................................................................................
C#
//-- 自己宣告 ----
using System.Data;
//===========================透過類別,動態產生 ItenTemplate樣版 ==(Start) ==
//==資料來源:http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.formview.dataitem.aspx#Y557
//-- 動態加入一個 Template for FormView
private sealed class MSDNTemplate : ITemplate
{
//-- 負責創造 Template的 .InstantiateIn()方法
//-- 資料來源:http://msdn.microsoft.com/zh-tw/library/system.web.ui.itemplate.instantiatein(v=VS.100).aspx
//-- 當類別實作時,定義子控制項和樣板所屬的 Control 物件。這些子控制項依次定義在內嵌樣板內。
void ITemplate.InstantiateIn(Control container)
{
//================================
//-- 動態產生 "樣版"裡面的「子控制項」,如:Label。
//================================
//-- 因為這些 Label必須搭配 SqlDataSource資料來源,進行 DataBinding,
//-- 所以必須為這些 Label搭配「DataBinding事件」。
Label Label1 = new Label();
Label1.ID = "Label1";
Label1.DataBinding += new EventHandler(Label1_DataBinding);
//== 重點!!這個 Label1的 DataBinding事件,就寫在下面。
LiteralControl lineBreak = new LiteralControl("<br /><br />");
Label Label2 = new Label();
Label2.ID = "Label2";
Label2.DataBinding += new EventHandler(Label2_DataBinding);
//== 重點!!這個 Label2的 DataBinding事件,就寫在下面。
// == 動態加入三個 Label控制項
container.Controls.Add(Label1);
container.Controls.Add(lineBreak);
container.Controls.Add(Label2);
}
//**** Label1的 DataBinding事件。****
private void Label1_DataBinding(Object sender, EventArgs e)
{
Label id_LabelControl = (Label)sender;
FormView formViewContainer = (FormView)id_LabelControl.NamingContainer;
DataRowView rowView = (DataRowView)formViewContainer.DataItem;
id_LabelControl.Text = rowView["id"].ToString();
}
//**** Label2的 DataBinding事件。****
private void Label2_DataBinding(Object sender, EventArgs e)
{
Label title_LabelControl = (Label)sender;
FormView formViewContainer = (FormView)title_LabelControl.NamingContainer;
DataRowView rowView = (DataRowView)formViewContainer.DataItem;
title_LabelControl.Text = rowView["title"].ToString();
title_LabelControl.Text += "<hr />" + rowView["article"].ToString();
}
}
//=============================透過類別,動態產生 ItenTemplate樣版 ==(End) ==
http://blog.blueshop.com.tw/uni2tw/archive/2006/10/03/41327.aspx
NamingContainer 使用時機
譬如 GridView裏的TemplateField 放了1個TextBox,1個CheckBox(設定AutoPostBack = "true")
畫面上的GridView假設有5筆資料,當其中一筆的CheckBox的事件CheckedChanged觸發時,可以藉由事件的參數 object sender,找到他是畫面上的哪一列,及該列的其它控制項。
http://msdn.microsoft.com/zh-tw/library/system.web.ui.control.namingcontainer(v=VS.100).aspx
[MSDN] Control.NamingContainer 屬性
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----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.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。