Accueil > .Net, ASP.Net, C#, Ext.Net > [Ext.Net] Helper pour la création du store

[Ext.Net] Helper pour la création du store

Série de billets sur les helpers que j’ai réalisés autour d’Ext.Net. Le sommaire référençant les helpers est ici : Présentation des helpers.

La première chose à créer, lorsque l’on veut créer des composants avec des données, c’est le store.

Déjà, qu’est ce que c’est le store.
Le store, c’est comme une DataSource, ça permet de stocker les données (dans notre cas, des données sérialisées).
L’inconvénient, c’est que TOUT le store est stocké dans la page.

Prenons un exemple.
Je souhaite utiliser un GridPanel pour afficher les données d’une liste générique de type :

    public class MySampleObject
    {
        public String StringProperty { get; set; }
        public DateTime DateProperty { get; set; }
        public Int32 IntProperty { get; set; }
        public String DoNotShowProperty { get; set; }
    }

Dans la source de la page, on aura :

		[...Extrait partiel...]

this.MainContent_MyGridExtPanelStoreId=new Ext.ux.data.PagingStore(
	{
	proxyId:"MainContent_MyGridExtPanelStoreId",
	autoLoad:true,
	reader:new Ext.data.JsonReader(
		{
		fields:[
			{name:"StringProperty"},
			{name:"IntProperty",type:"int"},
			{name:"DateProperty",type:"date",dateFormat:"Y-m-dTh:i:s"}
			]
		}),
	directEventConfig:{},
	proxy:new Ext.data.PagingMemoryProxy(
		[
		{"StringProperty":"I am property number 0","DateProperty":"1988-03-01T06:53:34","IntProperty":746583876,"DoNotShowProperty":"I am the hidden one."},
		{"StringProperty":"I am property number 1","DateProperty":"1944-04-13T21:10:31","IntProperty":1822087014,"DoNotShowProperty":"I am the hidden one."},
		{"StringProperty":"I am property number 2","DateProperty":"2000-06-22T14:37:03","IntProperty":1922942219,"DoNotShowProperty":"I am the hidden one."}

		[...Extrait partiel...]

Expliquons un peu cet extrait :
J’ai créé un store (type : PagingStore; id : MainContent_MyGridExtPanelStoreId).
Le reader utilisé est un JsonReader, c’est lui qui s’occupe de la lecture des données.
Au sein du reader, on référence trois colonnes (fields) , se sont les propriétés à afficher :  StringProperty, IntProperty (de type int dans la grille) et DateProperty (de type date dans la grille et avec le format spécifié).
Enfin, les données à proprement parlées sont stockée dans la page (PagingMemoryProxy, à moins de faire appel à un handler).

Mon objet contient plus de champ, il y a la propriété DoNotShowProperty que je ne souhaite pas afficher.
Mais comme c’est l’objet ENTIER qui est sérialisé, il convient de faire TRES attention aux objets utilisés (au même titre q’une page d’erreur affichant du code, cela peut être une faille de sécurité).

Ainsi, je conseillerais d’utiliser des objets « présentation », c’est à dire des objets minimalistes avec uniquement les champs que l’on souhaite afficher (mais qui n’hérite pas des objets métiers, sinon on en revient au même problème…).

Le deuxième effet kiss cool, c’est que comme l’objet est sérialisé (et ça, on y peut rien), il faut bien prévoir que toutes les propriétés de l’objet puissent être sérialisée.

A noter que l’attribut XmlIgnore n’est pas pris en compte.

Pour créer le store, j’utilise donc la classe suivante :

public class StoreFactory
{
    public static Ext.Net.Store Create(String id, JsonReader jsonReader, IList data, String groupByField)
    {
        // Création du Store
        Ext.Net.Store store = new Ext.Net.Store();
        store.ID = id;
        store.Reader.Add(jsonReader);
        store.SerializationMode = SerializationMode.Complex;
        // Groupement sur les entrées
        if (!String.IsNullOrEmpty(groupByField))
            store.GroupField = groupByField;

        store.AutoLoad = true;
        store.AutoDataBind = true;
        store.RemoteSort = false;
        store.RemotePaging = false;

        store.DataSource = data;
        store.DataBind();

        return store;
    }
    public static Ext.Net.Store Create(String id, JsonReader jsonReader, IList data)
    {
        return Create(id, jsonReader, data, null);
    }
}
Catégories :.Net, ASP.Net, C#, Ext.Net
  1. Aucun commentaire pour l’instant.
  1. 18/08/2011 à 18:27

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :