IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

accéder aux propriétés d'un controle à partir d'une fonction générale placée dans App_Code


Sujet :

ASP.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut accéder aux propriétés d'un controle à partir d'une fonction générale placée dans App_Code
    Bonjour a tous,
    Est-il possible d'agir sur les contrôles d'un formview à partir d'une classe placée dans App_code?

    Voici un exemple pour illustrer plus clairement ce que je voudrais faire:

    j'ai mon application qui se compose d'un form view dans lequel j'ai 5 champs DropDownList: A,B,C,D,E
    Je vais mettre en place cette application chez deux clients: TOTO et TITI.
    pour le client TOTO, le champ A aura une liste de valeur {x,y,z}, et si la valeur saisie par l'utilisateur est 'x', le fond sera rouge, sinon il sera bleu.
    Pour mon client TITI, le champ A sera une dropdownList avec des valeurs {a,b,c,d} , le colour background sera bleu et la propriété text sera initialisée à 'hello'
    Je voudrais donc dans ce cas avoir mon form view avec mes champs A,B,C,D,E puis avoir une class ma_class.cs dans laquelle je viendrais paramétrer les besoins spécifiques de TOTO et de TITI.

    (le but est de faciliter l'évolution et la maintenance de mon application, tout en gardant une souplesse de paramétrage pour chacun de mes clients)

    Est-ce qu'il est possible d'agir sur les contrôles de mon form view à partir de ma classe? (donc faire qqc comme FormView1.A.BackColor = "#FFFF00" à partir de ma_classe.cs, ou FormView1.A.text="Hello")

    Il y aurait il d'autres solutions plus facile? (je voudrais au maximum éviter le javascript et priviligier le code Behind)

    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Salut,

    Le plus simple serait d'avoir une feuille de style par client.
    <select class="style1">
    Client1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .style1{background-color: #FFFFFF;}
    Client2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .style1{background-color: #000000;}
    A+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Merci, mais ce n'est pas exactement ce que je voulais faire. Je voudrais être encore plus souple que ca: je donnais l'exemple du background color, mais je veux pouvoir agir sur chacune des propriètes de chacun de mes objets. Par exemple, je veux être capable de rendre un champ invisible sur ma form, le rendre enabled, readonly,etc...SANS MODIFIER les fichiers ASPX et ASPX.CS de ma form, mais en modifiant uniquement une classe bien particulière: ma_classe.cs.
    Merci de votre retour!

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2003
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2003
    Messages : 108
    Points : 129
    Points
    129
    Par défaut
    malheursement ce que tu veux faire n'a rien de souple, n'a surement pas été prévu pour cet usage.
    La solution la plus répandue est d'utiliser une interface dans App_Code, du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public interface ICustomPage
        {
            System.Web.UI.WebControls.TextBox GetTb();
        }
    l'ajouter à la définition de ta classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public partial class _Default : System.Web.UI.Page, ICustomPage
    avec l'implémentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     #region ICustomPage Members
     
            public TextBox GetTb()
            {
                return this.TXB1;
            }
     
            #endregion
    et là une fonction de ta classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public Function1()
            {
                ICustomPage page = HttpContext.Current.Handler as ICustomPage;
                page.GetTb().Text = "from app_code";
            }
    en gros en faisant ca, tu accede au TextBox TXB1 de la page Default
    c'est une méthode une peu crade, et très lourde pour ce que toi tu veux faire

  5. #5
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 512
    Points
    9 512
    Par défaut
    Mmmh. Ca sent l'usine à gaz...

    Où comptes-tu conserver tout ces paramètres?

    Je dirai qu'il faut que toutes tes contrôles héritent d'une ou plusieurs classes abstraites (ou interfaces) dans lesquelles tu définiras ces propriétés. Ensuite en fonction du client tu remontes de ta base de données les valeurs associées à la création du contrôle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //SI TOTO ALORS new TextBoxPerso()
    "SELECT TextBoxbackgroundcolor FROM [MATABLE] WHERE UserId = 'TOTO' AND TextBoxId = 'TextBoxNumero99'"
    Tu vas plomber ta base de données rapidement.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    Merci de votre aide, mais en fait, a force de chercher, j'ai trouvé un truc beaucoup plus simple et plus souple.
    Je le mets en dessous si ca peut intéresser d'autre personnes:

    En code behind de mon formview, j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    protected void Page_Load(object sender, EventArgs e)
    {
         //tout mon code vient se mettre ici
     
        //j'appelle ici ma méthode dans laquelle je viendrai paramétrer tous les besoins de mon client
         CustomEvents ce = new CustomEvents();
         ce.cs_Page_load(fvStyle);
    }
    Cette page fait partie du code source et évoluera de la même manière pour chacun des clients.
    Dans ma classe CustomEvents, je procède comme ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class CustomEvents
    {
     
        public void cs_Page_load(FormView fv)
        {
            //Put here all custom code that will be executed in the Main information
            CustomEvents ce = new CustomEvents();
     
            if (fv != null)
            {
                ce.SetStatusColor(fv, "FIELD_A");
                ce.SetMyFieldInvisible(fv,"FIELD_B");
            }
        }
     
        //set the color of a field
        public void SetStatusColor(FormView formView, string ctlName)
        {
            TextBox tbStatus = (TextBox)formView.FindControl(ctlName);
     
            if (tbStatus != null)
                tbStatus.BackColor = ColorTranslator.FromHtml("#FF00FF");
        }
     
        //make a field invisible
        public void SetMyFieldInvisible(FormView formView, string ctlName)
        {
            TextBox tbfield = (TextBox)formView.FindControl(ctlName);
            if (tbfield != null)
            {
                tbfield.Visible = false;
            }
     
        }
    }
    et ainsi, je peux agir sur chacun des textbox et/ou label voire même redéfinir le layout de la page en restant indépendant du code source.
    Lors d'une montée de version, on laisserait ces fichiers spécifiques au client, et il garderait ainsi ses paramètres.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/11/2009, 18h46
  2. Lister et accéder aux propriétés d'un controle
    Par Okaryn dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/01/2009, 15h59
  3. Réponses: 2
    Dernier message: 09/11/2007, 15h32
  4. Réponses: 3
    Dernier message: 02/01/2007, 14h09
  5. [C#]Accéder aux propriétés d'un User Control
    Par djoao dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/03/2006, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo