Création d'un objet source de contrôle ObjectDataSource

Mise à jour : novembre 2007

L'objet source pour un contrôle ObjectDataSource récupère des données et effectue des mises à jour dans la source de données sous-jacente comme demandé par le contrôle ObjectDataSource. L'objet source d'un contrôle ObjectDataSource peut être toute classe pour laquelle le contrôle ObjectDataSource peut créer une instance ou qui expose des méthodes static publiques (Shared en Microsoft Visual Basic) que le contrôle ObjectDataSource peut appeler.

Pour obtenir un exemple d'objet source et de la page ASP.NET qui inclut un contrôle ObjectDataSource utilisant l'objet source, consultez Objet source ObjectDataSource, exemple ou ObjectDataSource, exemple d'objet source fortement typé.

Création d'objets

Le contrôle ObjectDataSource crée une instance de l'objet source, appelle la méthode spécifiée et supprime l'instance d'objet dans la totalité de la portée d'une seule demande, si votre objet possède des méthodes d'instance au lieu de méthodes static (Shared en Visual Basic). Par conséquent, votre objet doit être sans état. C'est-à-dire que votre objet doit acquérir et libérer toutes les ressources requises dans l'étendue d'une seule demande.

Vous pouvez contrôler la façon dont l'objet source est créé en gérant l'événement ObjectCreating du contrôle ObjectDataSource. Vous pouvez créer une instance de l'objet source, puis définir la propriété ObjectInstance de la classe ObjectDataSourceEventArgs avec cette instance. Le contrôle ObjectDataSource utilise l'instance qui a été créée dans l'événement ObjectCreating au lieu de créer lui-même une instance.

Spécification d'un constructeur de classe

Si l'objet source pour un contrôle ObjectDataSource expose des méthodes static publiques (Shared en Visual Basic) qui peuvent être appelées pour récupérer et modifier des données, un contrôle ObjectDataSource appellera ces méthodes directement. Si un contrôle ObjectDataSource doit créer une instance de l'objet source afin d'effectuer des appels de méthode, l'objet doit inclure un constructeur public qui ne prend pas de paramètres. Le contrôle ObjectDataSource appelle ce constructeur lorsqu'il crée une nouvelle instance de l'objet source.

Si l'objet source ne contient pas de constructeur public sans paramètres, vous pouvez créer une instance de l'objet source qui sera utilisée par le contrôle ObjectDataSource de l'événement ObjectCreating (voir « Création d'objets » plus haut dans cette rubrique).

Spécification de méthodes Object

L'objet source pour un contrôle ObjectDataSource peut contenir tout nombre de méthodes utilisées pour sélectionner, insérer, mettre à jour ou supprimer des données. Ces méthodes sont appelées par le contrôle ObjectDataSource, selon le nom de la méthode, tel qu'identifié à l'aide de la propriété SelectMethod, InsertMethod, UpdateMethod ou DeleteMethod du contrôle ObjectDataSource et les noms des paramètres de la collection de paramètres connexe pour l'action sélectionnée. Pour plus d'informations, consultez Utilisation de paramètres avec le contrôle ObjectDataSource.

Votre objet source peut également inclure une méthode SelectCount facultative (identifiée par le contrôle ObjectDataSource à l'aide de la propriété SelectCountMethod) qui retourne le nombre total d'objets de la source de données. Le contrôle ObjectDataSource appelle la méthode SelectCount après l'appel d'une méthode Select pour récupérer le nombre total d'enregistrements de la source de données pour une utilisation lors de la pagination.

Remarque :

Il est fortement recommandé d'implémenter une méthode SelectCount si votre objet prend en charge la pagination. Cela réduira le nombre d'enregistrements qu'un contrôle lié aux données, tel que le contrôle GridView, doit demander pour récupérer une page de données. Si le nombre total de lignes est fourni par l'objet de données source, un contrôle lié aux données demandera uniquement une seule page de lignes à la fois pour chaque page. Si le nombre total de lignes n'est pas indiqué, un contrôle lié aux données doit demander toutes les lignes de la source de données (en commençant par la première ligne de la page de données demandée) et ignorer toutes les lignes qui ne figurent pas dans la page en cours.

Utilisation des objets fortement typés

Votre objet source peut retourner et recevoir des objets fortement typés selon les données de votre source de données. Le contrôle ObjectDataSource identifie le type de ces objets à l'aide de la propriété DataObjectTypeName. Dans ce scénario, au lieu de passer un ou plusieurs paramètres à une méthode, un objet qui regroupe toutes les valeurs de paramètre est passé. Pour plus d'informations sur la manière de passer un type d'objet spécifique en tant que paramètre pour une méthode d'objet source, consultez Utilisation de paramètres avec le contrôle ObjectDataSource.

Lorsque la propriété ConflictDetection d'un contrôle ObjectDataSource a la valeur CompareAllValues, et que la propriété OldValuesParameterFormatString a une valeur qui distingue les paramètres des valeurs d'origine de ceux des valeurs en cours, l'objet ObjectDataSource procède comme suit :

  • Appelez la méthode Update à partir de l'objet source qui accepte les paramètres des valeurs en cours et des valeurs d'origine.

  • Appelez la méthode Delete à partir de l'objet source qui accepte les paramètres des valeurs d'origine.

Lorsqu'il utilise un objet fortement typé, le contrôle ObjectDataSource appelle la méthode Update à partir de l'objet source qui accepte à la fois un objet fortement typé rempli avec les valeurs en cours et un objet fortement typé rempli avec les valeurs d'origine. Cependant, lorsque le contrôle ObjectDataSource appelle la méthode Delete et passe un objet fortement typé, il appelle la méthode qui accepte un seul objet fortement typé comme paramètre, indépendamment du paramètre ConflictDetection ou OldValuesParameterFormatString. Si la propriété ConflictDetection a la valeur OverwriteChanges, l'objet qui est passé à la méthode Delete est rempli uniquement avec les valeurs des clés primaires actuelles (les autres propriétés de l'objet sont null). Si la propriété ConflictDetection a la valeur CompareAllValues, l'objet qui est passé à la méthode Delete est rempli avec les valeurs des clés primaires d'origine ainsi qu'avec les valeurs d'origine, pour le reste des propriétés d'objet.

Utilisation des concepteurs

Éventuellement, vous pouvez appliquer des attributs à votre objet source qui le décrivent à un concepteur, tel que l'outil de développement Web Microsoft Visual Web Developer, comme un objet de données. Il s'ensuit une amélioration du travail du développeur qui utilise le concepteur en identifiant spécifiquement les méthodes de votre objet utilisées pour sélectionner, insérer, mettre à jour et supprimer.

Pour identifier votre objet en tant qu'objet source pour un contrôle ObjectDataSource, utilisez l'attribut DataObjectAttribute comme décrit dans l'exemple suivant.

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

Pour identifier une méthode en tant que méthode d'objet de données, utilisez l'attribut DataObjectMethodAttribute. Lorsque vous appliquez l'attribut DataObjectMethodAttribute, incluez l'une des valeurs d'énumération DataObjectMethodType pour identifier le type de méthode (sélection, insertion, mise à jour ou suppression). Par exemple, l'exemple de code suivant utilise l'attribut DataObjectMethodAttribute pour identifier une méthode en tant que méthode Delete.

<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;
}

Voir aussi

Concepts

Objet source ObjectDataSource, exemple

Utilisation de paramètres avec le contrôle ObjectDataSource

Référence

Vue d'ensemble du contrôle serveur Web ObjectDataSource