Imports System
Imports System.Collections
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Security.Permissions
Namespace Samples.AspNet.VB.Controls
' The child element class.
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public NotInheritable Class Employee
Private _name As String
Private _title As String
Private _alias As String
Public Sub New()
Me.New("", "", "")
End Sub 'New
Public Sub New(ByVal name As String, ByVal title As String, ByVal employeeAlias As String)
Me._name = name
Me._title = title
Me._alias = employeeAlias
End Sub 'New
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = Value
End Set
End Property
Public Property Title() As String
Get
Return _title
End Get
Set(ByVal value As String)
_title = Value
End Set
End Property
Public Property [Alias]() As String
Get
Return _alias
End Get
Set(ByVal value As String)
_alias = Value
End Set
End Property
End Class 'Employee
' Use the ParseChildren attribute to set the ChildrenAsProperties
' and DefaultProperty properties. Using this constructor, the
' control parses all child controls as properties and must define
' a public property named Employees, which it declares as
' an ArrayList. Nested (child) elements must correspond to
' child elements of the Employees property or to other
' properties of the control.
<ParseChildren(True, "Employees")> _
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public NotInheritable Class CollectionPropertyControl
Inherits Control
Private _header As String
Private _employees As New ArrayList()
Public Property Header() As String
Get
Return _header
End Get
Set(ByVal value As String)
_header = Value
End Set
End Property
Public ReadOnly Property Employees() As ArrayList
Get
Return _employees
End Get
End Property
' Override the CreateChildControls method to
' add child controls to the Employees property when this
' custom control is requested from a page.
Protected Overrides Sub CreateChildControls()
Dim label As New Label()
label.Text = Header
label.BackColor = System.Drawing.Color.Beige
label.ForeColor = System.Drawing.Color.Red
Controls.Add(label)
Controls.Add(New LiteralControl("<BR> <BR>"))
Dim table As New Table()
Dim htr As New TableRow()
Dim hcell1 As New TableHeaderCell()
hcell1.Text = "Name"
htr.Cells.Add(hcell1)
Dim hcell2 As New TableHeaderCell()
hcell2.Text = "Title"
htr.Cells.Add(hcell2)
Dim hcell3 As New TableHeaderCell()
hcell3.Text = "Alias"
htr.Cells.Add(hcell3)
table.Rows.Add(htr)
table.BorderWidth = Unit.Pixel(2)
table.BackColor = System.Drawing.Color.Beige
table.ForeColor = System.Drawing.Color.Red
Dim employee As Employee
For Each employee In Employees
Dim tr As New TableRow()
Dim cell1 As New TableCell()
cell1.Text = employee.Name
tr.Cells.Add(cell1)
Dim cell2 As New TableCell()
cell2.Text = employee.Title
tr.Cells.Add(cell2)
Dim cell3 As New TableCell()
cell3.Text = employee.Alias
tr.Cells.Add(cell3)
table.Rows.Add(tr)
Next employee
Controls.Add(table)
End Sub 'CreateChildControls
End Class
End Namespace
using System;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Permissions;
namespace Samples.AspNet.CS.Controls
{
// The child element class.
[AspNetHostingPermission(SecurityAction.Demand,
Level=AspNetHostingPermissionLevel.Minimal)]
public sealed class Employee
{
private String name;
private String title;
private String alias;
public Employee():this ("","",""){}
public Employee (String name, String title, String alias)
{
this.name = name;
this.title = title;
this.alias = alias;
}
public String Name
{
get
{
return name;
}
set
{
name = value;
}
}
public String Title
{
get
{
return title;
}
set
{
title = value;
}
}
public String Alias
{
get
{
return alias;
}
set
{
alias = value;
}
}
}
// Use the ParseChildren attribute to set the ChildrenAsProperties
// and DefaultProperty properties. Using this constructor, the
// control parses all child controls as properties and must define
// a public property named Employees, which it declares as
// an ArrayList. Nested (child) elements must correspond to
// child elements of the Employees property or to other
// properties of the control.
[ParseChildren(true, "Employees")]
[AspNetHostingPermission(SecurityAction.Demand,
Level=AspNetHostingPermissionLevel.Minimal)]
public sealed class CollectionPropertyControl : Control
{
private String header;
private ArrayList employees = new ArrayList();
public String Header
{
get
{
return header;
}
set
{
header = value;
}
}
public ArrayList Employees
{
get
{
return employees;
}
}
// Override the CreateChildControls method to
// add child controls to the Employees property when this
// custom control is requested from a page.
protected override void CreateChildControls()
{
Label label = new Label();
label.Text = Header;
label.BackColor = System.Drawing.Color.Beige;
label.ForeColor = System.Drawing.Color.Red;
Controls.Add(label);
Controls.Add(new LiteralControl("<BR> <BR>"));
Table table = new Table();
TableRow htr = new TableRow();
TableHeaderCell hcell1 = new TableHeaderCell();
hcell1.Text = "Name";
htr.Cells.Add(hcell1);
TableHeaderCell hcell2 = new TableHeaderCell();
hcell2.Text = "Title";
htr.Cells.Add(hcell2);
TableHeaderCell hcell3 = new TableHeaderCell();
hcell3.Text = "Alias";
htr.Cells.Add(hcell3);
table.Rows.Add(htr);
table.BorderWidth = 2;
table.BackColor = System.Drawing.Color.Beige;
table.ForeColor = System.Drawing.Color.Red;
foreach (Employee employee in Employees)
{
TableRow tr = new TableRow();
TableCell cell1 = new TableCell();
cell1.Text = employee.Name;
tr.Cells.Add(cell1);
TableCell cell2 = new TableCell();
cell2.Text = employee.Title;
tr.Cells.Add(cell2);
TableCell cell3 = new TableCell();
cell3.Text = employee.Alias;
tr.Cells.Add(cell3);
table.Rows.Add(tr);
}
Controls.Add(table);
}
}
}
package ParseChildrenSamples;
// When compiling this class, name it ParseChildren.dll.
// Create a namespace that defines two classes: one is a custom control
// named Employee, which is created for every instance of a child
// element with its name declared in a page associated with this namespace,
// and the other, named Employees, that contains these child elements.
import System.*;
import System.Collections.*;
import System.Web.*;
import System.Web.UI.*;
import System.Web.UI.WebControls.*;
// The child element class.
public class Employee
{
private String name;
private String title;
private String alias;
public Employee()
{
this("", "", "");
} //Employee
public Employee(String name, String title, String alias)
{
this.name = name;
this.title = title;
this.alias = alias;
} //Employee
/** @property
*/
public String get_Name()
{
return name;
} //get_Name
/** @property
*/
public void set_Name(String value)
{
name = value;
} //set_Name
/** @property
*/
public String get_Title()
{
return title;
} //get_Title
/** @property
*/
public void set_Title(String value)
{
title = value;
} //set_Title
/** @property
*/
public String get_Alias()
{
return alias;
} //get_Alias
/** @property
*/
public void set_Alias(String value)
{
alias = value;
} //set_Alias
} //Employee
// Use the ParseChildren attribute to set the ChildrenAsProperties
// and DefaultProperty properties. Using this constructor, the
// control parses all child controls as properties and must define
// a public property named Employees, which it declares as
// an ArrayList. Nested (child) elements must correspond to
// child elements of the Employees property or to other
// properties of the control.
/** @attribute ParseChildren(true, "Employees")
*/
public class CollectionPropertyControl extends Control
{
private String header;
private ArrayList employees = new ArrayList();
/** @property
*/
public String get_Header()
{
return header;
} //get_Header
/** @property
*/
public void set_Header(String value)
{
header = value;
} //set_Header
/** @property
*/
public ArrayList get_Employees()
{
return employees;
} //get_Employees
// Override the CreateChildControls method to
// add child controls to the Employees property when this
// custom control is requested from a page.
protected void CreateChildControls()
{
Label label = new Label();
label.set_Text(get_Header());
label.set_BackColor(System.Drawing.Color.get_Beige());
label.set_ForeColor(System.Drawing.Color.get_Red());
get_Controls().Add(label);
get_Controls().Add(new LiteralControl("<BR> <BR>"));
Table table = new Table();
TableRow htr = new TableRow();
TableHeaderCell hCell1 = new TableHeaderCell();
hCell1.set_Text("Name");
htr.get_Cells().Add(hCell1);
TableHeaderCell hCell2 = new TableHeaderCell();
hCell2.set_Text("Title");
htr.get_Cells().Add(hCell2);
TableHeaderCell hCell3 = new TableHeaderCell();
hCell3.set_Text("Alias");
htr.get_Cells().Add(hCell3);
table.get_Rows().Add(htr);
table.set_BorderWidth(new Unit(2));
table.set_BackColor(System.Drawing.Color.get_Beige());
table.set_ForeColor(System.Drawing.Color.get_Red());
Employee employee = null;
for (int iCtr = 0; iCtr < get_Employees().get_Count(); iCtr++) {
employee = (Employee)get_Employees().get_Item(iCtr);
TableRow tr = new TableRow();
TableCell cell1 = new TableCell();
cell1.set_Text(employee.get_Name());
tr.get_Cells().Add(cell1);
TableCell cell2 = new TableCell();
cell2.set_Text(employee.get_Title());
tr.get_Cells().Add(cell2);
TableCell cell3 = new TableCell();
cell3.set_Text(employee.get_Alias());
tr.get_Cells().Add(cell3);
table.get_Rows().Add(tr);
}
get_Controls().Add(table);
} //CreateChildControls
} //CollectionPropertyControl