Erstellen eines Quellobjekts für das ObjectDataSource-Steuerelement

Aktualisiert: November 2007

Das Quellobjekt für ein ObjectDataSource-Steuerelement ruft Daten ab und führt Aktualisierungen für die zugrunde liegende Datenquelle aus, wenn dies vom ObjectDataSource-Steuerelement angefordert wird. Bei dem Quellobjekt für ein ObjectDataSource-Steuerelement kann es sich um eine beliebige Klasse handeln, von der das ObjectDataSource-Steuerelement eine Instanz erstellen kann oder die öffentliche static-Methoden (Shared in Microsoft Visual Basic) verfügbar macht, die vom ObjectDataSource-Steuerelement aufgerufen werden können.

Ein Beispiel zu einem Quellobjekt und der ASP.NET-Seite mit einem ObjectDataSource-Steuerelement, das das Quellobjekt verwendet, finden Sie unter Beispiel für ein ObjectDataSource-Quellobjekt oder Beispiel für ein ObjectDataSource-Quellobjekt mit strikter Typbindung.

Erstellen von Objekten

Das ObjectDataSource-Steuerelement erstellt eine Instanz des Quellobjekts, ruft die angegebene Methode auf und löscht die Objektinstanz in einer Anforderung, wenn das Objekt über Instanzmethoden anstelle von static-Methoden verfügt (Shared in Visual Basic). Deshalb muss das Objekt zustandslos sein. Dies bedeutet, dass das Objekt alle erforderlichen Ressourcen innerhalb einer Anforderung ermitteln und freigeben muss.

Durch Behandlung des ObjectCreating-Ereignisses des ObjectDataSource-Steuerelements können Sie steuern, wie das Quellobjekt erstellt wird. Sie können eine Instanz des Quellobjekts erstellen und anschließend die ObjectInstance-Eigenschaft der ObjectDataSourceEventArgs-Klasse auf diese Instanz festlegen. Anstatt eine eigene Instanz zu erstellen, verwendet das ObjectDataSource-Steuerelement die im ObjectCreating-Ereignis erstellte Instanz.

Angeben eines Klassenkonstruktors

Wenn das Quellobjekt für ein ObjectDataSource-Steuerelement öffentliche static-Methoden verfügbar macht (Shared in Visual Basic), die zum Abrufen und Ändern von Daten aufgerufen werden können, ruft ein ObjectDataSource-Steuerelement diese Methoden direkt auf. Wenn ein ObjectDataSource-Steuerelement eine Instanz des Quellobjekts erstellen muss, um die Methoden aufzurufen, muss das Objekt einen öffentlichen Konstruktor umfassen, der keine Parameter annimmt. Das ObjectDataSource-Steuerelement ruft diesen Konstruktor auf, wenn es eine neue Instanz des Quellobjekts erstellt.

Falls das Quellobjekt keinen öffentlichen Konstruktor ohne Parameter besitzt, können Sie eine Instanz des Quellobjekts erstellen, die vom ObjectDataSource-Steuerelement im ObjectCreating-Ereignis verwendet wird, wie es unter "Objekterstellung" weiter oben in diesem Thema beschrieben wurde.

Angeben von Objektmethoden

Das Quellobjekt für ein ObjectDataSource-Steuerelement kann beliebig viele Methoden enthalten, mit denen Daten ausgewählt, eingefügt, aktualisiert oder gelöscht werden. Diese Methoden werden vom ObjectDataSource-Steuerelement auf Grundlage des Namens der Methode aufgerufen. Dies wird mithilfe der Eigenschaften SelectMethod, InsertMethod, UpdateMethod oder DeleteMethod des ObjectDataSource-Steuerelements und der Namen der Parameter angegeben, die sich in der entsprechenden Parameterauflistung für die ausgewählte Aktion befinden. Ausführliche Informationen finden Sie unter Verwenden von Parametern mit dem ObjectDataSource-Steuerelement.

Das Quellobjekt kann auch eine optionale SelectCount -Methode enthalten, welche vom ObjectDataSource-Steuerelement mithilfe der SelectCountMethod-Eigenschaft angegeben wird, die die Gesamtanzahl der Objekte in der Datenquelle zurückgibt. Das ObjectDataSource-Steuerelement ruft die SelectCount-Methode auf, nachdem eine Select-Methode aufgerufen wurde, um die Gesamtanzahl von Datensätzen in der Datenquelle abzurufen, die beim Paging verwendet werden sollen.

Hinweis:

Das Implementieren einer SelectCount-Methode wird dringend empfohlen, wenn das Objekt Paging unterstützt wird. Dies hält die Anzahl von Datensätzen, die von einem datengebundenen Steuerelement wie GridView zum Abrufen einer Datenseite angefordert werden müssen, möglichst gering. Wenn das Datenquellenobjekt die Gesamtanzahl der Zeilen bereitstellt, wird von einem datengebundenen Steuerelement nur jeweils eine Zeilenseite für jede Seite angefordert. Wenn die Gesamtanzahl der Zeilen nicht bereitgestellt wird, müssen von einem datengebundenen Steuerelement alle Zeilen von der Datenquelle angefordert werden, beginnend mit der ersten Zeile der angeforderten Datenseite. Alle Zeilen, die nicht auf der aktuellen Seite vorhanden sind, müssen verworfen werden.

Arbeiten mit stark typisierten Objekten

Das Quellobjekt kann stark typisierte Objekte auf Grundlage der Daten aus der Datenquelle zurückgeben und empfangen. Das ObjectDataSource-Steuerelement gibt den Typ dieser Objekte mithilfe der DataObjectTypeName-Eigenschaft an. Anstatt einen oder mehrere Parameter an eine Methode zu übergeben, wird in diesem Szenario ein Objekt übergeben, das alle Parameterwerte zusammenfasst. Weitere Informationen zum Übergeben eines bestimmten Objekttyps als Parameter für eine Quellobjektmethode finden Sie unter Verwenden von Parametern mit dem ObjectDataSource-Steuerelement.

Wenn die ConflictDetection-Eigenschaft eines ObjectDataSource-Steuerelements auf den Wert CompareAllValues und die OldValuesParameterFormatString-Eigenschaft auf einen Wert festgelegt ist, der Parameter für ursprüngliche Werte von Parametern für aktuelle Werte unterscheidet, tut die ObjectDataSource Folgendes:

  • Aufrufen der Update-Methode aus dem Quellobjekt, die Parameter sowohl für aktuelle als auch für ursprüngliche Werte erwartet.

  • Aufrufen der Delete-Methode aus dem Quellobjekt, die Parameter für ursprüngliche Werte erwartet.

Bei Verwendung eines stark typisierten Objekts ruft das ObjectDataSource-Steuerelement die Update-Methode aus dem Quellobjekt auf, die ein stark typisiertes Objekt mit aktuellen Werten und ein stark typisiertes Objekt mit ursprünglichen Werten erwartet. Wenn jedoch das ObjectDataSource-Steuerelement die Delete-Methode aufruft und ein stark typisiertes Objekt übergibt, ruft es die Methode auf, die ein einzelnes stark typisiertes Objekt als Parameter erwartet, unabhängig von der ConflictDetection-Einstellung oder der OldValuesParameterFormatString-Einstellung. Wenn die ConflictDetection-Eigenschaft auf den OverwriteChanges-Wert festgelegt ist, wird das an die Delete-Methode übergebene Objekt nur mit aktuellen Primärschlüsselwerten gefüllt (die anderen Eigenschaften des Objekts sind null). Wenn die ConflictDetection-Eigenschaft auf den CompareAllValues-Wert festgelegt ist, wird das an die Delete-Methode übergebene Objekt mit den ursprünglichen Primärschlüsselwerten und den ursprünglichen Werten gefüllt. Die übrigen Objekteigenschaften werden mit den ursprünglichen Werten gefüllt.

Arbeiten mit Designern

Sie können optional auch Attribute auf das Quellobjekt anwenden, die es für einen Designer als Datenobjekt beschrieben, z. B. für das Microsoft Visual Web Developer-Webentwicklungstool. Dies kann die Erfahrung eines Entwicklers verbessern, der den Designer verwendet, indem spezifisch bestimmt wird, welche Methoden des Objekts für Auswahl-, Einfüge-, Aktualisierungs- und Löschvorgänge verwendet werden.

Mit dem DataObjectAttribute-Attribut können Sie das Objekt als Quellobjekt für ein ObjectDataSource-Steuerelement angeben, wie im folgenden Beispiel dargestellt.

<DataObject(True)> _
Public Class NorthwindEmployee 
[DataObject(true)]
public class NorthwindEmployee

Um eine Methode als Datenobjektmethode zu kennzeichnen, verwenden Sie das DataObjectMethodAttribute-Attribut. Schließen Sie beim Anwenden des DataObjectMethodAttribute-Attributs einen der DataObjectMethodType-Enumerationswerte ein, um den Typ der Methode anzugeben (Select, Insert, Update oder Delete). Im folgenden Codebeispiel wird das DataObjectMethodAttribute-Attribut verwendet, um eine Methode als Delete-Methode zu kennzeichnen.

<DataObjectMethod(DataObjectMethodType.Delete)> _
Public Shared Function DeleteEmployee(EmployeeID As Integer) As Boolean

  If Not _initialized Then Initialize()

  Dim conn As SqlConnection  = New SqlConnection(_connectionString)
  Dim cmd  As SqlCommand     = New SqlCommand("DELETE FROM Employees WHERE EmployeeID = @EmployeeID", conn)  
  cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID

  Try
    conn.Open()

    If cmd.ExecuteNonQuery() <> 0 Then _
      Return False
  Catch e As SqlException
    ' Handle exception.
  Finally
    conn.Close()
  End Try

  Return True
End Function
[DataObjectMethod(DataObjectMethodType.Delete)]
public static bool DeleteEmployee(int EmployeeID)
{
  if (!_initialized) { Initialize(); }

  SqlConnection conn = new SqlConnection(_connectionString);
  SqlCommand    cmd  = new SqlCommand("DELETE FROM Employees WHERE EmployeeID = @EmployeeID", conn);  
  cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID;

  try
  {
    conn.Open();

    if (cmd.ExecuteNonQuery() == 0)
      return false;
  }
  catch (SqlException e)
  {
    // Handle exception.
  }
  finally
  {
    conn.Close();
  }

  return true;
}

Siehe auch

Konzepte

Beispiel für ein ObjectDataSource-Quellobjekt

Verwenden von Parametern mit dem ObjectDataSource-Steuerelement

Referenz

Übersicht über das ObjectDataSource-Webserversteuerelement