ObjectDataSource est un contrôle de source de données ASP.NET qui représente un objet de couche intermédiaire lié aux bases de données ou un objet d'interface de données pour les contrôles liés aux données. Vous pouvez utiliser le contrôle ObjectDataSource conjointement à un contrôle lié aux données pour afficher, modifier et trier des données sur une page Web avec peu ou pas de code.
Une pratique de conception d'application très courante consiste à séparer la couche présentation de la logique métier et à encapsuler la logique métier dans les objets métier. Ces objets métier forment une couche distincte entre la couche présentation et la couche Données, constituant ainsi une architecture d'applications à trois couches. Le contrôle ObjectDataSource permet aux développeurs d'utiliser un contrôle de source de données ASP.NET tout en conservant leur architecture d'applications à trois couches.
Le contrôle ObjectDataSource utilise la réflexion pour créer des instances d'objets métier et appeler des méthodes sur ces objets afin de récupérer, mettre à jour, insérer et supprimer des données. La propriété TypeName identifie le nom de la classe fonctionnant avec ObjectDataSource. Le contrôle ObjectDataSource crée et détruit une instance de la classe pour chaque appel à une méthode ; il ne garde pas l'objet en mémoire pendant la durée de vie de la demande Web. Cela constitue un facteur important si l'objet métier que vous utilisez requiert beaucoup de ressources ou si sa création et sa destruction coûtent cher. L'utilisation d'un objet coûteux ne peut pas provenir d'un choix de conception optimal, mais vous pouvez contrôler le cycle de vie de l'objet à l'aide des événements ObjectCreating, ObjectCreated et ObjectDisposing.
Remarque |
|---|
| Les méthodes qui sont identifiées par les propriétés SelectMethod, UpdateMethod, InsertMethod et DeleteMethod peuvent être des méthodes d'instance ou des méthodes staticShared en Visual Basic). Si les méthodes sont static (Shared en Visual Basic), aucune instance de l'objet métier n'est créée et les événements ObjectCreating, ObjectCreated et ObjectDisposing ne sont pas déclenchés. |
Pour récupérer les données d'un objet métier, affectez à la propriété SelectMethod le nom de la méthode qui récupère les données. Si la méthode ne retourne pas d'objet IEnumerable ou DataSet, l'objet est encapsulé par l'exécution dans une collection IEnumerable. Si la signature de la méthode comporte des paramètres, vous pouvez ajouter des objets Parameter à la collection SelectParameters, puis les lier aux valeurs que vous souhaitez passer à la méthode spécifiée par la méthode SelectMethod. Pour que ObjectDataSource puisse utiliser les paramètres, ceux-ci doivent correspondre aux noms et types des paramètres dans la signature de la méthode.
Le contrôle ObjectDataSource récupère des données chaque fois que la méthode Select est appelée. Cette méthode fournit un accès par programme à la méthode spécifiée par la propriété SelectMethod. La méthode spécifiée par la propriété SelectMethod est appelée automatiquement par les contrôles liés au ObjectDataSource lorsque leur méthode DataBind est appelée. Si vous définissez la propriété DataSourceID d'un contrôle lié aux données, le contrôle crée automatiquement une liaison avec les données de la source de données, si nécessaire. La définition de la propriété DataSourceID est la méthode recommandée pour lier un contrôle ObjectDataSource à un contrôle lié aux données. Vous pouvez également définir la propriété DataSource, mais vous devrez ensuite appeler explicitement la méthode DataBind du contrôle lié aux données. Vous pouvez à tout moment appeler la méthode Select par programme pour récupérer des données.
Pour plus d'informations sur la liaison de contrôles liés aux données à des contrôles de source de données, consultez Liaison à des données à l'aide d'un contrôle de source de données.
Selon les fonctions de l'objet métier fonctionnant avec ObjectDataSource, vous pouvez exécuter des opérations de données, telles que des mises à jour, des insertions et des suppressions. Pour exécuter ces opérations de données, définissez le nom de méthode approprié et tous les paramètres associés pour l'opération que vous souhaitez exécuter. Par exemple, pour une opération de mise à jour, affectez à la propriété UpdateMethod le nom de la méthode de l'objet métier qui effectue des mises à jour et ajoutez tous les paramètres requis à la collection UpdateParameters. Si le contrôle ObjectDataSource est associé à un contrôle lié aux données, les paramètres sont ajoutés par le contrôle lié aux données. Dans ce cas, vous devez vous assurer que les noms de paramètres de la méthode correspondent aux noms des champs du contrôle lié aux données. La mise à jour est effectuée lorsque la méthode Update est appelée, soit explicitement par votre code ou automatiquement par un contrôle lié aux données. Les opérations Delete et Insert suivent le même modèle général. Les objets métier sont supposés exécuter ces types d'opérations de données dans chaque enregistrement de manière individuelle, plutôt que par lots.
Le contrôle ObjectDataSource peut filtrer les données récupérées par la propriété SelectMethod, si les données sont retournées en tant qu'objet DataSet, DataView ou DataTable. Le contrôle ObjectDataSource vous permet de mettre en cache tous les types de données, mais vous ne devez pas mettre en cache les objets qui conservent les ressources ou un état ne pouvant pas être partagés pour traiter plusieurs demandes (par exemple, un objet SqlDataReader ouvert), parce que cette même instance de l'objet sera utilisée pour traiter plusieurs demandes. Vous pouvez affecter une expression de filtrage à la propriété FilterExpression à l'aide d'une syntaxe de chaîne de format et de valeurs de liaison dans l'expression aux paramètres spécifiés dans la collection FilterParameters.
ObjectDataSource ne conserve pas l'instance de l'objet métier à travers plusieurs demandes, mais il peut mettre en cache le résultat de la méthode SelectMethod. Tandis que les données sont mises en cache, les appels suivants à la méthode Select retournent les données mises en cache au lieu de créer l'objet métier et appeler son SelectMethod à l'aide de la réflexion. La mise en cache vous permet d'éviter de créer l'objet et d'appeler sa méthode de données aux dépens de la mémoire du serveur Web ; il peut s'agir d'un bon compromis. ObjectDataSource met les données automatiquement en cache lorsque la propriété EnableCaching a la valeur true et lorsque la valeur de la propriété CacheDuration correspond au nombre de secondes pendant lesquelles le cache stocke les données avant d'être ignoré. Vous pouvez également spécifier une propriété CacheExpirationPolicy et éventuellement une propriété SqlCacheDependency.
Le tableau suivant décrit les fonctionnalités du contrôle ObjectDataSource.
| Fonction | Configuration requise |
| Sélection | Affectez à la propriété SelectMethod le nom de la méthode de l'objet métier qui sélectionne les données et incluez tous les paramètres nécessaires dans la collection SelectParameters, soit par programme ou en utilisant un contrôle lié aux données. |
| Tri | Affectez à la propriété SortParameterName le nom du paramètre dans la méthode SelectMethod qui retient les critères de tri. |
| Filtrage | Affectez à la propriété FilterExpression une expression de filtrage et ajoutez les paramètres éventuels à la collection FilterParameters pour filtrer les données lorsque la méthode Select est appelée. La méthode spécifiée par la propriété SelectMethod doit retourner un DataSet, DataView ou DataTable. |
| Pagination | La pagination de source de données est prise en charge si la méthode SelectMethod contient les paramètres pour le nombre maximal d'enregistrements à récupérer et l'index du premier enregistrement à récupérer. Les noms de ces paramètres doivent être définis dans les propriétés MaximumRowsParameterName et StartRowIndexParameterName respectivement. Un contrôle lié aux données peut exécuter la pagination lui-même, même si le contrôle ObjectDataSource ne prend pas en charge la pagination directement dans la méthode spécifiée par la propriété SelectMethod. Pour que le contrôle lié aux données puisse exécuter la pagination, la méthode spécifiée par la propriété SelectMethod doit retourner un objet qui implémente l'interface Icollection. |
| Mise à jour | Affectez à la propriété UpdateMethod le nom de la méthode de l'objet métier qui met les données à jour et incluez tous les paramètres nécessaires dans la collection UpdateParameters. |
| Suppression | Affectez à la propriété DeleteMethod le nom de la méthode ou de la fonction d'objet métier qui supprime les données et incluez tous les paramètres nécessaires dans la collection DeleteParameters. |
| Insertion | Affectez à la propriété InsertMethod le nom de la méthode ou de la fonction d'objet métier qui insère les données et incluez tous les paramètres nécessaires dans la collection InsertParameters. |
| Mise en cache | Affectez la valeur true à la propriété EnableCaching, et définissez les propriétés CacheDuration et CacheExpirationPolicy selon le comportement de mise en cache de votre choix pour vos données mises en cache. |
Comme tous les contrôles de source de données, le contrôle ObjectDataSource est associé à une classe d'affichage de la source de données. Le contrôle ObjectDataSource correspond à l'interface utilisée par le développeur de pages pour traiter les données, tandis que la classe ObjectDataSourceView correspond à l'interface avec laquelle les contrôles liés aux données fonctionnent. En outre, la classe ObjectDataSourceView décrit les fonctions du contrôle de source de données et exécute le travail réel. Le contrôle ObjectDataSource n'est associé qu'à un ObjectDataSourceView et est toujours nommé DefaultView. Tandis que l'objet ObjectDataSourceView est exposé par la méthode GetView, nombre de ses propriétés et méthodes sont encapsulées et exposées directement par le contrôle ObjectDataSource. En arrière-plan, l'objet ObjectDataSourceView exécute toutes les opérations de données, y compris la récupération, l'insertion, la mise à jour, la suppression, le filtrage et le tri des données. Pour plus d'informations, consultez ObjectDataSourceView.
Il n'y a pas de rendu visuel du contrôle ObjectDataSource ; il est implémenté comme un contrôle. Vous pouvez donc le créer de manière déclarative et lui permettre éventuellement de participer à la gestion d'état. Par conséquent, ObjectDataSource ne prend pas en charge les fonctionnalités visuelles, telles que la propriété EnableTheming ou SkinID.