Sdílet prostřednictvím


Entwickeln von benutzerdefinierten datengebundenen Webserversteuerelementen für ASP.NET 1.1

Aktualisiert: November 2007

Ein datengebundenes ASP.NET-Webserversteuerelement verfügt über eine Benutzeroberfläche für eine Datenquelle, die eine Auflistung von Datensätzen oder Elementen darstellt. Beispiele für datengebundene Webserversteuerelemente sind die Serversteuerelemente Übersicht über das GridView-Webserversteuerelement, Übersicht über das DataList-Webserversteuerelement und Übersicht über das Repeater-Webserversteuerelement. Weitere Informationen über datengebundene ASP.NET-Steuerelemente finden Sie unter Übersicht über datengebundene ASP.NET-Webserversteuerelemente.

Dieses Thema enthält eine Einführung in die Schritte, die erforderlich sind, um eine minimale Version eines benutzerdefinierten datengebundenen Serversteuerelements zu implementieren, das mit Version 1.1 von ASP.NET kompatibel ist. Weitere Informationen über das Erstellen von benutzerdefinierten datengebundenen Steuerelementen in ASP.NET, Version 2.0, finden Sie unter Entwickeln von benutzerdefinierten datengebundenen Webserversteuerelementen für ASP.NET 2.0. Weitere Informationen über die allgemeine Architektur und Implementierung von benutzerdefinierten Steuerelementen finden Sie unter Entwickeln von benutzerdefinierten ASP.NET-Serversteuerelementen und Exemplarische Vorgehensweise: Entwickeln und Verwenden eines benutzerdefinierten Serversteuerelements.

Gründe für die Erstellung eines benutzerdefinierten datengebundenen Steuerelements

Bevor Sie benutzerdefinierte datengebundene Steuerelemente erstellen, sollten Sie die Funktionen der mit ASP.NET bereitgestellten datengebundenen Steuerelemente überprüfen. Möglicherweise gibt es bereits ein Steuerelement, das Ihre Anforderungen erfüllt oder das über viele der gewünschten Features verfügt, sodass Sie es lediglich erweitern müssen. Weitere Informationen über datengebundene ASP.NET-Steuerelemente finden Sie unter Übersicht über datengebundene ASP.NET-Webserversteuerelemente.

Nachfolgend finden Sie einige Gründe, die für die Erstellung eines benutzerdefinierten datengebundenen Steuerelements sprechen:

  • Ihre besonderen Anforderungen verlangen eine benutzerdefinierte Oberfläche und benutzerdefinierte Features zum Sortieren oder Bearbeiten von Daten, über die vorhandene datengebundene Steuerelemente nicht verfügen.

  • Sie möchten ein benutzerdefiniertes datengebundenes Steuerelement erstellen, das vorkompiliert und verteilbar ist.

  • Sie möchten die Features eines datengebundenen Steuerelements erweitern, das bereits mit ASP.NET bereitgestellt wird.

  • Sie möchten ein datengebundenes Steuerelement mit einem benutzerdefinierten Designer erstellen, der Ihre besonderen Anforderungen erfüllt.

Grundlegende Funktionalität eines benutzerdefinierten datengebundenen Steuerelements

Durch Ableiten von der Control-Klasse oder der WebControl-Klasse erbt das benutzerdefinierte datengebundene Steuerelement automatisch viele integrierte Features, z. B. folgende:

  • Ein explizites Datenbindungsmodell, das Datenbindungsausdrücke unterstützt. Das explizite ASP.NET-Datenbindungsmodell führt die Datenbindung nicht bei jedem Postback, sondern nur bei Bedarf durch. Nachdem eine Seite die erste Datenbindungsanforderung ausgeführt hat, versuchen nachfolgende Anforderungen, die Daten aus dem Ansichtszustand abzurufen. Auf diese Weise wird die Leistung verbessert, da nicht für jede Anforderung eine erneute Verbindung zur Datenquelle hergestellt werden muss.

  • Unterstützung für Datenbindungsausdrücke, die es Seitenentwicklern ermöglicht, Bindungen zwischen einer verfügbar gemachten, speziell gekennzeichneten Eigenschaft des Steuerelements und einer Datenquelle zu erstellen. Weitere Informationen über Datenbindungsausdrücke finden Sie unter Übersicht über Datenbindungsausdrücke.

Verwenden von verfügbaren Entwurfszeitfeatures

Alle Webserversteuerelemente verfügen über Entwurfszeitfeatures, die möglicherweise auch für benutzerdefinierte datengebundene Steuerelemente infrage kommen. Beispielsweise können Sie eine Designerklasse und Vorlagen für das benutzerdefinierte Steuerelement erstellen. Diese Features werden aufgerufen, wenn das Steuerelement auf einer visuellen Entwurfsoberfläche wie der Entwurfsansicht in Visual Studio verwendet wird.

Durch das Erstellen eines Steuerelement-Designers können Seitenentwickler das benutzerdefinierte Steuerelement zur Entwurfszeit deutlich effizienter nutzen, da die Steuerelementeigenschaften über eine Entwurfszeitoberfläche angepasst werden können. Eine Übersicht über die ASP.NET-Steuerelement-Designer finden Sie unter Übersicht über ASP.NET-Steuerelement-Designer. Beispiele zu diesem Thema finden Sie unter HierarchicalDataBoundControlDesigner und Exemplarische Vorgehensweise: Erstellen eines einfachen Steuerelement-Designers für ein Webserver-Steuerelement.

Die Erstellung eines Steuerelements mit Vorlagen verschafft Seitenentwicklern die Flexibilität, die Steuerelemente und das Markup zur Definition der Benutzeroberfläche des Steuerelements anzugeben. Ein Beispiel für ein benutzerdefiniertes Steuerelement mit Vorlagen finden Sie unter Beispiel für ein vorlagenbasiertes Serversteuerelement.

Implementieren eines benutzerdefinierten datengebundenen Steuerelements in ASP.NET

Die folgende Tabelle enthält eine Zusammenfassung der Implementierungsanforderungen für ein datengebundenes Serversteuerelement in ASP.NET 1.1. Nach der Tabelle finden Sie ausführlichere Informationen über die jeweiligen Implementierungsanforderungen.

Voraussetzung

Beschreibung

Machen Sie eine DataSource-Eigenschaft verfügbar.

Ermöglicht einem Seitenentwickler, der das Steuerelement verwendet, die Datenquelle anzugeben, an die gebunden werden soll.

Überschreiben Sie die DataBind-Methode, und erstellen Sie eine Logik, um das Objekt in der zugeordneten Datenquelle aufzulisten.

Die Logik dieser Methode sieht folgendermaßen aus:

  • Die OnDataBinding-Methode des Serversteuerelements wird aufgerufen, um das DataBind-Ereignis auszulösen. Dadurch können alle Datenbindungsausdrücke, die der Seitenentwickler dem datengebundenen Serversteuerelement möglicherweise zugeordnet hat, ausgewertet werden.

  • Sie müssen die gesamte Logik bereitstellen, um die Objekte in der Datenquelle hier aufzulisten.

  • Alle untergeordneten Steuerelemente werden erstellt, um die Datenquelle visuell darzustellen.

Erstellen Sie eine Hierarchie der untergeordneten Steuerelemente, indem Sie die CreateChildControls-Methode überschreiben.

Beim Postback werden untergeordnete Steuerelemente neu erstellt und an Daten gebunden, die während eines vorherigen DataBind-Aufrufs im Ansichtszustand gespeichert wurden.

ms366538.alert_note(de-de,VS.90).gifHinweis:

Zur Erstellung einer Hierarchie der untergeordneten Steuerelemente empfiehlt es sich, eine einfache Hilfsmethode zu erstellen, die von der DataBind-Methode und der CreateChildControls-Methode aufgerufen wird. Beispielsweise könnte die Hilfsmethode, mit der die Hierarchie der untergeordneten Steuerelemente erstellt wird, einen Boolean-Wert akzeptieren, der darauf hinweist, dass die Daten aus der gebundenen Quelle oder dem Ansichtszustand stammen. Bei dieser Vorgehensweise wird die Hierarchie der untergeordneten Steuerelemente in einem gemeinsamen Codepfad erstellt. Ein Beispiel hierfür finden Sie unter Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten datengebundenen ASP.NET-Websteuerelements für ASP.NET 1.1.

Verfügbarmachen einer DataSource-Eigenschaft

Ein datengebundenes ASP.NET 1.1-Steuerelement, das von Control oder WebControl abgeleitet wurde, muss eine DataSource-Eigenschaft verfügbar machen, damit der Seitenentwickler die Datenauflistung auswählen kann, an die das Serversteuerelement gebunden wird. Zur Laufzeit durchläuft das benutzerdefinierte datengebundene Steuerelement die der DataSource-Eigenschaft zugewiesene Datenauflistung, während es Benutzeroberflächenelemente zur Darstellung dieser Daten erstellt und bindet.

Ein datengebundenes Serversteuerelement kann an diese Typen binden:

Das folgende Codebeispiel zeigt, wie eine DataSource-Eigenschaft für ein datengebundenes Steuerelement verfügbar gemacht wird. Der DataSource-Typ wird als IEnumerable-Typ deklariert.

<Category("Data"), DefaultValue(""), Description("An exposed data source: A public member of type IEnumerable to bind to such as an Array, ArrayList or Hashtable.")> _
Public Overridable Property DataSource() As IEnumerable
    Get
        Return _dataSource
    End Get
    Set(ByVal value As IEnumerable)
        If TypeOf value Is IEnumerable OrElse value Is Nothing Then
            _dataSource = value
        Else
            Throw New ArgumentException()
        End If
    End Set
End Property
[
Category("Data"),
DefaultValue(""),
Description("An exposed data source: A public member of type IEnumerable to bind to such as an Array, ArrayList or Hashtable.")
]
public virtual IEnumerable DataSource
{
    get
    {
        return _dataSource;
    }
    set
    {
        if ((value is IEnumerable) || (value == null))
        {
            _dataSource = value;
        }
        else
        {
            throw new ArgumentException();
        }
    }
}

Dieses Beispiel beginnt mit Metadatenattributen wie [Category], [DefaultValue] und [Description], die Informationen bereitstellen, die von Entwurfstools, dem ASP.NET-Seitenparser, der ASP.NET-Laufzeit und der Common Language Runtime (CLR) verwendet werden. Das BindableAttribute benachrichtigt einen visuellen Designer, dass der Eigenschaftenbrowser die bindungsfähigen Eigenschaften des Steuerelements in einem Dialogfeld anzeigen kann. (In Visual Studio werden bindungsfähige Eigenschaften beispielsweise im Dialogfeld Datenbindungen angezeigt.) Das CategoryAttribute gibt an, wie die Eigenschaft im Eigenschaftenbrowser des visuellen Designers kategorisiert wird. Weitere Informationen über Metadatenattribute, einschließlich der in diesem Beispiel verwendeten, finden Sie unter Metadatenattribute für benutzerdefinierte Serversteuerelemente.

Der set-Accessor für die DataSource-Eigenschaft überprüft, ob der Wert entweder auf null festgelegt oder vom Typ IEnumerable ist. Daher kann der Seitenentwickler in diesem Beispiel Daten an jeden IEnumerable-Typ binden, z. B. Array, ArrayList oder Hashtable. Alternativ kann der Entwickler die DataSource auf null festlegen, bis eine geeignete Datenquelle vom Typ IEnumerable verfügbar ist.

ms366538.alert_note(de-de,VS.90).gifHinweis:

Wenn das benutzerdefinierte datengebundene Serversteuerelement in der Lage sein soll, an einen IEnumerable-Datentyp oder einen IListSource-Datentyp zu binden, können Sie die DataSource-Eigenschaft als generischen Typ Object deklarieren. In diesem Fall muss der set-Accessor, der die DataSource-Eigenschaft verfügbar macht, den Typ des an ihn übergebenen Objekts überprüfen und dann entweder IEnumerable oder IListSource implementieren.

Überschreiben der DataBind-Methode und Auflisten der zugeordneten Datenquelle

Sie stellen im benutzerdefinierten Steuerelement eine Überschreibung der DataBind-Basismethode bereit, um zwei Aufgaben auszuführen: Durchlaufen der gebundenen Datenauflistung und Erstellen einer Hierarchie der untergeordneten Steuerelemente zur Darstellung der Daten. Die folgende Liste enthält eine Zusammenfassung der Aufgaben, die Sie innerhalb der überschriebenen DataBind-Methode ausführen müssen:

  • Rufen Sie die OnDataBinding-Basismethode des benutzerdefinierten Steuerelements auf.

  • Löschen Sie alle vorhandenen untergeordneten Steuerelemente.

  • Löschen Sie alle Ansichtszustände von untergeordneten Steuerelementen.

  • Verfolgen Sie den Zustand, damit Änderungen während der Datenbindung im Ansichtszustand erhalten bleiben.

  • Erstellen Sie die Hierarchie der untergeordneten Steuerelemente.

  • Legen Sie die ChildControlsCreated-Eigenschaft auf true fest.

Beginnen Sie damit, die OnDataBinding-Basismethode des Steuerelements aus der überschriebenen DataBind-Methode im Steuerelement aufzurufen. Durch das Aufrufen der OnDataBinding-Basismethode des Steuerelements werden alle Datenbindungsausdrücke für das Steuerelement ausgewertet. Das folgende Codebeispiel zeigt, wie die OnDataBinding-Methode in einem datengebundenen Serversteuerelement als erste Aufgabe innerhalb der überschriebenen DataBind-Methode aufgerufen wird.

public override void DataBind()
{
    base.OnDataBinding(EventArgs.Empty);
}
Public Overrides Sub DataBind()
    MyBase.OnDataBinding(EventArgs.Empty)
End Sub

Löschen Sie anschließend die vorhandenen untergeordneten Steuerelemente. Da die Hierarchie der untergeordneten Steuerelemente bei jedem Postback, das auf den zu bindenden Daten basiert, neu erstellt werden muss, müssen vorhandene untergeordnete Steuerelemente durch Aufrufen der geerbten Clear-Methode des Steuerelements gelöscht werden, wie im folgenden Codebeispiel gezeigt.

public override void DataBind()
{
    base.OnDataBinding(EventArgs.Empty);
    Controls.Clear();
}
Public Overrides Sub DataBind()
    MyBase.OnDataBinding(EventArgs.Empty)
    Controls.Clear()
End Sub

Da zur Darstellung neu gebundener Daten neue untergeordnete Steuerelemente erstellt werden, müssen alle Ansichtszustände für vorhandene untergeordnete Steuerelemente gelöscht werden. Um die Ansichtszustände aller untergeordneten Steuerelemente zu löschen, müssen Sie die geerbte ClearChildViewState-Methode des Steuerelements aufrufen.

Nachdem Sie den Ansichtszustand aller vorhandenen untergeordneten Steuerelemente gelöscht haben, starten Sie die Ansichtszustandsverfolgung des Steuerelements, indem Sie die geerbte TrackViewState-Methode des Steuerelements aufrufen. Die Ansichtszustandsverfolgung des Steuerelements wird gestartet, bevor die Hierarchie der untergeordneten Steuerelemente erstellt wird, sodass Änderungen, die während der Datenbindung an der Hierarchie vorgenommen werden, im Ansichtszustand erhalten bleiben. Da ein Seitenentwickler DataBind während des PreInit-Ereignisses der Seite aufrufen kann, ist nicht garantiert, dass die Basisklasse des Steuerelements einen Ansichtszustand verfolgt, der nach dieser Phase im Seitenlebenszyklus auftritt. In diesem Fall würde die Ansichtszustandsverfolgung für das Steuerelement zu spät erfolgen.

Das folgende Codebeispiel veranschaulicht ein datengebundenes Serversteuerelement, das seine TrackViewState-Methode aufruft.

public override void DataBind() 
{
    TrackViewState();
}
Public Overrides Sub DataBind()
    TrackViewState()
End Sub

Als Nächstes erstellen Sie die Hierarchie der untergeordneten Steuerelemente. Die Hierarchie der untergeordneten Steuerelemente dient zur visuellen Darstellung der Datenquelle, an die das benutzerdefinierte datengebundene Steuerelement gebunden ist. Sie wird erstellt, wenn entweder die überschriebene DataBind-Methode oder die überschriebene CreateChildControls-Methode des benutzerdefinierten Steuerelements von dessen Basisklasse aufgerufen wird. Wenn die überschriebene DataBind-Methode des Steuerelements von dessen Basisklasse aufgerufen wird, wird die Hierarchie der untergeordneten Steuerelemente auf Grundlage der gebundenen Datenquelle erstellt. Wenn die überschriebene CreateChildControls-Methode des Steuerelements von dessen Basisklasse aufgerufen wird, wird die Hierarchie der untergeordneten Steuerelemente auf Grundlage der im Ansichtszustand gespeicherten Daten erstellt.

Die Erstellung der Hierarchie der untergeordneten Steuerelemente wird durch Aufrufen der DataBind-Methode des Steuerelements ausgelöst. Das Steuerelement durchläuft die Daten, die von der verfügbar gemachten DataSource-Eigenschaft bereitgestellt werden, und instanziiert ein neues untergeordnetes Steuerelement zur Darstellung der jeweiligen Datenelemente. Wenn die Datenquelle beispielsweise ein Array von Zeichenfolgen ist, die an die Text-Eigenschaft von Button-Steuerelementen gebunden werden sollen, durchlaufen Sie das Array und erstellen dabei ein neues Button-Steuerelement, dessen Text-Eigenschaft dem als Zeichenfolge dargestellten Datenelement zugewiesen wird.

Nachdem Sie die Hierarchie der untergeordneten Steuerelemente erstellt haben, legen Sie die ChildControlsCreated-Eigenschaft auf true fest, um zu verhindern, dass die CreateChildControls-Methode von der Basisklasse aufgerufen wird.

Das folgende Codebeispiel zeigt, wie die ChildControlsCreated-Eigenschaft eines datengebundenen Serversteuerelements auf true festgelegt wird.

public override void DataBind()
{
     ChildControlsCreated = true;
} 
Public Overrides Sub DataBind()
    ChildControlsCreated = True
End Sub

Die benutzerdefinierte datengebundene Steuerelementklasse muss eine überschriebene CreateChildControls-Methode bereitstellen, in der das Steuerelement die Hierarchie der untergeordneten Steuerelemente neu erstellt und die Anwendung des gespeicherten Ansichtszustands unterstützt. (Der Ansichtszustand wird während des letzten Aufrufs der DataBind-Methode des Steuerelements gespeichert.)

Die folgende Liste enthält eine Zusammenfassung der Aufgaben, die Sie innerhalb der überschriebenen CreateChildControls-Methode ausführen müssen:

  • Löschen Sie alle vorhandenen untergeordneten Steuerelemente.

  • Erstellen Sie die Hierarchie der untergeordneten Steuerelemente, sofern der Ansichtszustand verfügbar ist.

Bevor Sie die Hierarchie der untergeordneten Steuerelemente neu erstellen, müssen Sie alle vorhandenen untergeordneten Steuerelementobjekte löschen. Hierzu rufen Sie die Clear-Methode des Steuerelements auf.

Das folgende Codebeispiel veranschaulicht ein datengebundenes Serversteuerelement, das seine Clear-Methode aufruft.

public override void CreateChildControls()
{
    Controls.Clear();
}

Als letzten Schritt erstellen Sie die Hierarchie der untergeordneten Steuerelemente. Die CreateChildControls-Methode muss die Hierarchie der untergeordneten Steuerelemente neu erstellen, sofern ein Ansichtszustand verfügbar ist. Solange in einer Hierarchie die gleiche Anzahl und die gleichen Arten von untergeordneten Steuerelementen erstellt werden, wird der gespeicherte Ansichtszustand automatisch auf die untergeordneten Steuerelemente angewendet. Das benutzerdefinierte Steuerelement kann die Informationen speichern, die benötigt werden, um die gleiche Anzahl, Art und Hierarchie an untergeordneten Steuerelementen in der ViewState-Eigenschaft des Steuerelements neu zu erstellen. Weitere Informationen zum Speichern des Ansichtszustands von Steuerelementen finden Sie unter ViewState. Ein vollständiges Codebeispiel zur Erstellung einer Hierarchie der untergeordneten Steuerelemente in einem benutzerdefinierten datengebundenen Steuerelement finden Sie unter Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten datengebundenen ASP.NET-Websteuerelements für ASP.NET 1.1.

Erstellen des benutzerdefinierten Serversteuerelements

Weitere Informationen zum Erstellen des benutzerdefinierten datengebundenen Webserversteuerelements und dessen Verwendung in einer Webseite finden Sie unter Erstellen der Beispiele für benutzerdefinierte Serversteuerelemente.

ms366538.alert_note(de-de,VS.90).gifHinweis:

Sie müssen einen Verweis auf die System.Design-Assembly hinzufügen, um sie in die Kompilierung einzuschließen.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten datengebundenen ASP.NET-Websteuerelements für ASP.NET 1.1

Exemplarische Vorgehensweise: Entwickeln und Verwenden eines benutzerdefinierten Serversteuerelements

Konzepte

Übersicht über datengebundene ASP.NET-Webserversteuerelemente

Metadatenattribute für benutzerdefinierte Serversteuerelemente

Übersicht über ASP.NET-Steuerelement-Designer

Referenz

HierarchicalDataBoundControlDesigner

Weitere Ressourcen

Entwickeln von benutzerdefinierten ASP.NET-Serversteuerelementen