Accueil > .Net, ASP.Net, C#, Ext.Net > [Ext.Net] Helper pour la création d’une ComboBox

[Ext.Net] Helper pour la création d’une ComboBox

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.

Avec Ext.Net, il y a plusieurs types de Combobox disponibles.
Pour ma part, j’ai pris la plus simple : celle qui affiche le contenu d’une liste dont le contenu est connu avant la création de la combo.

En pratique, cela veut dire que, dans la page, j’ organise le code comme il suit :

Etape 1 : déclaration des combobox comme propriétés de la page (du user control)

private ExtComboBox combo1;

Etape 2 : configurer la combobox

private ExtComboEntity GetConfigComboBox(int id)
{
    return new ExtComboEntity()
    {
        ComboID = String.Concat("Combobox", id),
        Resizable = true,
        DisplayField = "StringProperty",
        ValueField = "IntProperty",
        EmptyText = "Select value...",
        AllowRemove = true
    };
}

Note : normalement, la propriété EmptyText doit pointer vers une ressource (*.resx / *.resources), mais pour les exemples, je suis passé outre (voir solution d’exemples).

Etape 3 : dans l’évènement OnInit : création du contrôle (constructeur et appel de la méthode SetDataAndConfiguration)

combo1 = new ExtComboBox();
combo1.SetDataAndConfiguration(GetConfigComboBox(1), data.Take(10).ToList(), Combobox1Container);

Etape 4 : dans l’évènement Page_Load : présélection des champs

combo1.SelectedText = "I am property number 9";

En terme de fonctionnement interne, la liste passée en paramètre est transformée en une liste générique de type AnonymousObject.
En effet, j’ai dis à l’occasion de la présentation du helper pour le store que TOUT l’objet est sérialisé.
Dans mon exemple (voir le code sur GitHub), j’utilise un objet MySampleObject qui contient quatre propriétés. Si je laisse Ext.Net le sérialiser, j’aurais dans ma source les quatre propriétés.
A mon sens, cela pose deux problèmes majeurs : le poids de la page qui est chargée inutilement et, plus grave, une possible faille de sécurité.
Donc, avec un peu de réflexion (dans tous les sens du terme), il est possible de transformer, mon proxy est donc pas mal allégé.

new Ext.data.PagingMemoryProxy(
	[
	{"Text":"I am property number 0","Value":"0"},
	{"Text":"I am property number 1","Value":"1"},
	{"Text":"I am property number 2","Value":"2"},
	{"Text":"I am property number 3","Value":"3"}
	[...]

Au lieu de :

new Ext.data.PagingMemoryProxy(
	[
	{"StringProperty":"I am property number 0","DateProperty":"1946-01-15T10:13:50","IntProperty":0,"DoNotShowProperty":"I am the hidden one."},
	{"StringProperty":"I am property number 1","DateProperty":"1982-09-13T22:33:58","IntProperty":1,"DoNotShowProperty":"I am the hidden one."},
	{"StringProperty":"I am property number 2","DateProperty":"1960-02-21T22:15:14","IntProperty":2,"DoNotShowProperty":"I am the hidden one."},
	{"StringProperty":"I am property number 3","DateProperty":"1944-01-20T09:34:41","IntProperty":3,"DoNotShowProperty":"I am the hidden one."},
	[...]
Catégories :.Net, ASP.Net, C#, Ext.Net
  1. Aucun commentaire pour l’instant.
  1. 19/08/2011 à 18:10

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 :