TemplateField als UserControl

02/12/2008 - 23:35 von Lutz Elßner | Report spam
<asp:TemplateField>
<ItemTemplate><%#Eval("A")%></ItemTemplate>
<FooterTemplate><%#ft("A")%></FooterTemplate>
<EditItemTemplate><asp:TextBox ID="TB1" runat="server" Text='<%# Bind("A") %>' /></EditItemTemplate>
</asp:TemplateField>

Ich möchte ein datengebundenes TemplateField in ein UserControl auslagern

1. um es mehrfach zu verwenden
2. um es per Code dem GridView als Column hinzu zu fügen.

Wie funktioniert das?

Lutz
 

Lesen sie die antworten

#1 Lutz Elßner
06/12/2008 - 23:22 | Warnen spam

<asp:TemplateField>
<ItemTemplate><%#Eval("A")%></ItemTemplate>
<FooterTemplate><%#ft("A")%></FooterTemplate>
<EditItemTemplate><asp:TextBox ID="TB1" runat="server" Text='<%# Bind("A") %>' /></EditItemTemplate>
</asp:TemplateField>

Ich möchte ein datengebundenes TemplateField in ein UserControl auslagern

1. um es mehrfach zu verwenden



Templates mehrfach verwenden, durch laden aus einer externen Datei

EditItemTemplate.ascx:
<asp:TextBox ID="t1" runat="server" Text='<%# Bind("x") %>'></asp:TextBox>
<br />
<asp:TextBox ID="t2" runat="server" Text='<%# Bind("y") %>'></asp:TextBox>


Deklaration in template.aspx:
<asp:GridView runat="server">
<Columns>
<cc1:LoadITemplates></cc1:LoadITemplates>
</Columns>
</asp:GridView>


Code:

Option Explicit On
Option Strict On
' 06.12.08 Lutz Elßner
' Ruft aus einer externen Datei eine Instanz der System.Web.UI.ITemplate-Schnittstelle ab.
' Die externe .ascx Datei steht im selben Ordner wie die .aspx Datei.
Imports System.IO
Imports System.Web.HttpContext

Public Class LoadITemplates
Inherits System.Web.UI.WebControls.TemplateField

Public ReadOnly TemplateControl As System.Web.UI.TemplateControl

Public Sub New()
Me.New(New _TemplateControl, VirtualPath)
End Sub

Public Sub New(ByVal page As System.Web.UI.TemplateControl, ByVal virtualPath As String)
Me.TemplateControl = page ' virtualPath: /Website/template/ oder ~/template/
Dim mapPath As String = Current.Server.MapPath(virtualPath)
'C:\Documents and Settings\ich\My Documents\Visual Studio 2008\Projects\WebControls\Website\template\

If File.Exists(mapPath & "ItemTemplate.ascx") Then
Me.ItemTemplate = Me.TemplateControl.LoadTemplate(virtualPath & "ItemTemplate.ascx")
Else
Throw New FileNotFoundException("ItemTemplate.ascx muss im selben Ordner wie die .aspx Datei stehen: " & _
virtualPath, mapPath & "ItemTemplate.ascx")
End If
If File.Exists(mapPath & "EditItemTemplate.ascx") Then
Me.EditItemTemplate = Me.TemplateControl.LoadTemplate(virtualPath & "EditItemTemplate.ascx")
End If
If File.Exists(mapPath & "AlternatingItemTemplate.ascx") Then
Me.AlternatingItemTemplate = Me.TemplateControl.LoadTemplate(virtualPath & "AlternatingItemTemplate.ascx")
End If
If File.Exists(mapPath & "FooterTemplate.ascx") Then
Me.FooterTemplate = Me.TemplateControl.LoadTemplate(virtualPath & "FooterTemplate.ascx")
End If
If File.Exists(mapPath & "HeaderTemplate.ascx") Then
Me.HeaderTemplate = Me.TemplateControl.LoadTemplate(virtualPath & "HeaderTemplate.ascx")
End If
If File.Exists(mapPath & "InsertItemTemplate.ascx") Then
Me.InsertItemTemplate = Me.TemplateControl.LoadTemplate(virtualPath & "InsertItemTemplate.ascx")
End If
End Sub

Public Shared ReadOnly Property VirtualPath() As String
Get
With Current.Request.Url.LocalPath ' /Website/template/template.aspx
Return .Substring(0, .LastIndexOf("/"c) + 1) ' endet mit /
End With ' /Website/template/
End Get
End Property

Private Class _TemplateControl
Inherits System.Web.UI.TemplateControl
End Class

End Class

Ähnliche fragen