L'ObjectDataSource dans asp.net2.0 peut permettre aux contrôles d'affichage des données tels que GridView d'être liés pour l'affichage et l'édition. Il prend également en charge la pagination, le tri, etc. Après avoir utilisé l'ORM, vous pouvez également utiliser ObjectDataSource.
La pagination ici ne supprime plus toutes les pages de la base de données, puis les lie de manière sélective, mais supprime directement les pages de la base de données, puis les lie. La différence est encore énorme et l’efficacité est grandement améliorée.
L'édition, la création et le tri sont tous fournis directement par ObjectDataSource, et il n'est pas nécessaire d'écrire du code dans GridView.
De cette façon, la conception de l'objet peut contenir beaucoup de logique, au moins pour les opérations de base de données, et l'interface utilisateur apparaîtra relativement simple. Si vous la décollez et l'ouvrez un peu, il sera plus avantageux de la transplanter pour gagner. à l'avenir, ou en faire un SmartClient.
Voici un blog qui parle mieux http://www.evosoftworks.com/Articles/wormods.aspx .
Il se trouve que j'utilisais WilsonORM, alors j'en ai créé un en conséquence.
La structure de base est la suivante :
UI (GridView et autres contrôles - contrôle ObjectDataSource) ----〉Classe ObjectDataSource (objet, écriture de pagination CRUD et autre logique)---〉(ORM implémente CRUD)---〉DB
comporte plusieurs étapes principales
1 : Ajoutez des propriétés et des méthodes à l'objet pour compléter le CRUD, la pagination et toute autre logique
2 : configurez les contrôles d'interface utilisateur tels que GridView pour vous connecter au contrôle ObjectDataSource.
Regardons d'abord le premier
1 : Ajoutez des propriétés et des méthodes à Object pour compléter le CRUD, la pagination et toute autre logique. La classe Object est générée par l'outil en fonction de la structure de la base de données, et le fichier Mapping est également généré.
Tout d’abord, ajoutez un attribut d’identification DataObject() à l’objet, dans l’espace de noms System.ComponentModel [DataObject()]
classe publique Description du produit
{Deuxièmement, ajoutez des méthodes CRUD à cette classe d'objets.
Regardons d'abord une méthode Insert
[DataObjectMethod (DataObjectMethodType.Insert)]
public static void Insert (ProductDescription productDescription)
{
essayer
{
Manager.DataManager.StartTracking(productDescription, InitialState.Inserted);
Manager.DataManager.PersistChanges(productDescription);
}
attraper (Exception ex)
{
log.Error(ex);
}
} Cette méthode doit être précédée d'un attribut [DataObjectMethod(DataObjectMethodType.Insert)], indiquant qu'il s'agit de la méthode Insert ;
Cette méthode est une méthode publique statique ;
Le paramètre est une instance de l'objet lui-même. C'est mieux, car la logique est facile à comprendre et fonctionne entièrement sur Object.
Le reste des méthodes Delete et Update sont également écrites de cette manière.
Jetez ensuite un œil à la méthode Select, qui est assez particulière.
Sélectionnez la méthode
1 [DataObjectMethod (DataObjectMethodType.Select)]
2 public Collection<ProductDescription> Récupérer (requête de chaîne, int maxRows, int startRowIndex, chaîne sortClause)
3 {
4 essais
5 {
6 int numPages = 0;
7 si (sortClause == null || sortClause == "")
8 sortClause = "ModifiedDate Desc" ;
9 Collection<ProductDescription> cs ;
10 cs = RetrievePage(query, sortClause, maxRows, (int)Math.Ceiling((double)startRowIndex / maxRows) + 1, sur numPages);
11 _numRecs = ((IObjectPage)cs).TotalCount;
12 retours cs ;
13}
14 prises (Exception ex)
15 {
16 log.Erreur (ex);
17 renvoie nul ;
18}
19}
20 [DataObjectMethod (DataObjectMethodType.Select)]
21 ObjectSet public statique Récupérer (clé de chaîne, valeur de chaîne)
vingt-deux {
23 si (Valeur == null || Valeur == "")
24 renvoie null ;
25 essais
26 {
27 Assistant QueryHelper = Manager.DataManager.QueryHelper;
28 Clé = helper.GetFieldName(typeof(ProductDescription).ToString() + "." + Clé);
29 Requête ObjectQuery = new ObjectQuery(typeof(ProductDescription), String.Format("{0}='{1}'", Clé, Valeur), "");
30 ObjectSet obj = Manager.DataManager.GetObjectSet(query);
31 retour obj;
32}
33 prises (Exception ex)
34 {
35 log.Erreur (ex);
36 renvoie null ;
37 }
38 }
39
40 public int RecCount (requête de chaîne, int maxRows, int startRowIndex, chaîne sortClause)
41 {
42 renvoie _numRecs ;
43}
44
45 public static Collection<ProductDescription> RetrievePage (string WhereClause, string sortClause, int pageSize, int pageIndex, out int pageCount)
46 {
47 ObjectQuery<ProductDescription> query = new ObjectQuery<ProductDescription>(whereClause, sortClause, pageSize, pageIndex);
48 ObjectSet<ProductDescription> pageSet = Manager.DataManager.GetObjectSet<ProductDescription>(query);
49 pageCount = pageSet.PageCount;
50 pages de retour;
51 } La première méthode est public Collection<ProductDescription> Retrieve(string query, int maxRows, int startRowIndex, string sortClause), qui est une méthode qui peut implémenter la pagination et le tri intégrés. Il convient de noter que ce code _numRecs = ((IObjectPage)cs).TotalCount; Ici, après la pagination, le nombre total de pages est utilisé en conséquence, la méthode public int RecCount(. string query, int maxRows, int startRowIndex, string sortClause) sont utilisés pour récupérer le nombre d'enregistrements, notez que ces deux méthodes doivent correspondre et que les paramètres sont les mêmes ;
La deuxième méthode, static public ObjectSet Retrieve(string Key, string Value), récupère simplement un enregistrement. Peut être utilisé dans l’affichage de DetailView/FormView.
Bien que le code semble être volumineux, il est en fait très structuré, vous pouvez donc utiliser CodeSmith ou modifier directement l'outil ORMHelper pour le générer dynamiquement sans écrire de code manuellement.
Avec ces quatre méthodes, CRUD, pagination et tri sont terminés. Un tel objet n'a rien à voir avec l'interface utilisateur, mais seulement avec la logique des données.
2 : configuration de l'interface utilisateur. La configuration de l'interface utilisateur est également divisée en deux couches : GridView et autres contrôles d'affichage ;
Configurez maintenant la source de données de l'objet pour des contrôles tels que GridView et connectez-vous directement à l'objet pour implémenter des fonctions telles que l'affichage et l'édition. En fait, il s'agit de définir une propriété connectée à l'ObjectDataSource.
<asp:GridView ID="gv_data" runat="server" AllowPaging="True" AllowSorting="True" DataSourceID="ods_list"
Il s'agit de la configuration du contrôle ObjectDataSource
ObjetDataSource
1<asp:ObjectDataSource ID="ods_list" runat="server" DataObjectTypeName="BusinessModel.ProductDescription"
2 DeleteMethod="Supprimer" OldValuesParameterFormatString="original_{0}" SelectMethod="Récupérer"
3 TypeName="BusinessModel.ProductDescription" UpdateMethod="Mise à jour" SortParameterName="sortClause"
4 MaximumRowsParameterName="maxRows" SelectCountMethod="RecCount" EnablePaging="true"
5 ConflictDetection="OverwriteChanges" ConvertNullToDBNull="false">
6 <SélectionnerParamètres>
7 <asp:Parameter Name="query" Type="String" />
8 <asp:Parameter Name="maxRows" Type="Int32" />
9 <asp:Parameter Name="startRowIndex" Type="Int32" />
10 <asp:Parameter Name="sortClause" Type="String" />
11 </SélectionnerParamètres>
12</asp:ObjectDataSource>
Jetez un œil aux propriétés à l'intérieur, qui sont les paramètres de configuration de la méthode CRUD et le nom de la méthode correspondante. C’est exactement ce que nous mettons en œuvre en classe. Par exemple, la méthode Supprimer est configurée ici : DeleteMethod="Delete" ; et voici l'attribut du nombre d'enregistrements que nous venons de mentionner : SelectCountMethod="RecCount" et tri et ainsi de suite.
Comment passer les paramètres ici ? Les attributs liés au système sont transmis par le système, par exemple maxRows, startRowIndex, etc. ; ils peuvent également être transmis par code : this.ods_list.SelectParameters["query"].DefaultValue = query