Sub CreateColumn(ByVal ColumnName As String, Optional ByVal EditMode As Boolean = True, Optional ByVal columnHeaderName As String = "", Optional ByVal SpecialEditMode As Boolean = False)
Dim tc2 As New TemplateColumn()
If columnHeaderName = "" Then
columnHeaderName = ColumnName
ElseIf columnHeaderName = "0" Then
columnHeaderName = ""
End If
tc2.HeaderTemplate = New _
DataGridTemplate(ListItemType.Header, columnHeaderName)
tc2.ItemTemplate = New _
DataGridTemplate(ListItemType.Item, ColumnName)
If EditMode Then
tc2.EditItemTemplate = New _
DataGridTemplate(ListItemType.EditItem, ColumnName)
Else
tc2.EditItemTemplate = New _
DataGridTemplate(ListItemType.Item, ColumnName)
End If
If SpecialEditMode Then
tc2.ItemTemplate = New _
DataGridTemplate(ListItemType.EditItem, ColumnName)
End If
tc2.FooterTemplate = New _
DataGridTemplate(ListItemType.Footer, ColumnName)
Grid1.Columns.Add(tc2)
End Sub
'创建动态模板列的类
Private Class DataGridTemplate
Implements ITemplate
Dim templateType As ListItemType
Dim columnName As String
Sub New(ByVal type As ListItemType, ByVal ColName As String)
templateType = type
columnName = ColName
End Sub
Sub InstantiateIn(ByVal container As Control) _
Implements ITemplate.InstantiateIn
Dim lc As New LiteralControl
Select Case templateType
Case ListItemType.Header
lc.Text = "<B>" & columnName & "</B>"
container.Controls.Add(lc)
Case ListItemType.Item
lc.Text = "Item " & columnName
lc.ID = columnName
AddHandler lc.DataBinding, AddressOf Me.OnDataBinding
container.Controls.Add(lc)
Case ListItemType.EditItem
Dim tb As New TextBox()
tb.Text = ""
tb.Width = 20
tb.Style.Add("display", "none")
tb.ID = columnName
AddHandler tb.DataBinding, AddressOf Me.OnDataBinding
container.Controls.Add(tb)
Case ListItemType.Footer
lc.Text = "<I>Footer</I>"
container.Controls.Add(lc)
End Select
End Sub
Sub OnDataBinding(ByVal sender As Object, ByVal e As EventArgs)
Dim l As Object
If TypeOf (sender) Is TextBox Then
l = CType(sender, TextBox)
ElseIf TypeOf (sender) Is LiteralControl Then
l = CType(sender, LiteralControl)
End If
Dim Container As DataGridItem
Container = l.NamingContainer
l.Text = CType(Container.DataItem, DataRowView)(columnName).ToString()
End Sub
End Class