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 :

Custom WebControl et ViewState !


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Par défaut Custom WebControl et ViewState !
    Bonjour tout le monde !

    J'ai ici un problème avec ma classe de tableau que j'ai créé, héritant de System.Web.UI.WebControls.Table .

    Le problème est :

    Le ViewState est vide durant mon PostBack, ce qui signifie que toutes les propriétés de mon tableau (que j'ai sauvegardé dans ledit ViewState) sont à null ou avec leur valeurs par défaut.

    Voici le code de mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public bool DisplayHeaders
    {
    	get
    	{ 
    		if (ViewState["TableDisplayHeader"] == null )
    			 ViewState["TableDisplayHeader"] = true;
    		return (bool)ViewState["TableDisplayHeader"];
    	}
    	set { ViewState["TableDisplayHeader"] = value; }
    }
    Est-ce bien une façon d'enregistrer une propriété dans le ViewState ?


    Je vous remercie d'avance pour les réponse =)

  2. #2
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    Vérifie que le ViewState n'est pas désactivé sur ton contrôle, ta page ou ton application (respectivement dans le code de ta page aspx, dans la directive @Page de ta page aspx et dans le web.config de ton application)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Par défaut
    Tous les endroits où j'ai pu indiqué que le ViewState doit être activés sont à "true".

    Alors, j'ai résolu mon problème : je ne savais pas que pour accéder au ViewState de mon control, je devais faire MonControl.ViewState["MaClef"], et non pas Page.ViewState["MaClef"].

    Le ViewState de ma page était vide, pas celui de mon contrôleur.

    Le hic, c'est que dans un table, les Rows ne sont pas Serializable, ce qui signifique que je ne peux pas les sauvegarder, je dois donc relancer la création des Rows à chaque chargement de la page, mais vu que ma source de données à afficher a été sérialisée sans problème (ajout de l'attribut [Serializable]), je n'ai donc qu'à effectuer 1 seul appel en base de données car, au PostBack, les données sont chargées à partir du ViewState .

    Voici un apperçu de ma classe et de mes propriétés pour mieux me faire comprendre :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    [Serializable()]
    [SupportsEventValidation()]
    [ToolboxData("<{0}:TableModeled runat=server />")]
    public class GenericTableControl<T> : Table, INamingContainer, IPostBackEventHandler where T : ICloneable
    	{
                    public bool DisplayHeaders
    		{
    			get
    			{ 
    				if (ViewState["TableDisplayHeader"] == null)
    					 ViewState["TableDisplayHeader"] = true;
    				return (bool)ViewState["TableDisplayHeader"];
    			}
    			set { ViewState["TableDisplayHeader"] = value; }
     
                    public List<T> DataSources
    		{
    			get
    			{
    				if (ViewState["TableDataSources"] == null)
    					ViewState["TableDataSources"] = new List<T>();
    				return ViewState["TableDataSources"] as List<T>;
    			}
    			set { ViewState["TableDataSources"] = value; }
    		}
     
                    public virtual void BuildTable()
    		{
    			try
    			{
    				if (ViewState["TableDataSources"] == null)
    					throw new Exception("Data source's not set.");
    				this.Rows.Clear();
     
    				int colspan = 1;
    				if (this.HeaderRows.Count > 0)
    				{
    					this.Rows.AddRange(this.HeaderRows.ToArray());
    					foreach (TableCell cell in this.HeaderRows[0].Cells)
    						colspan += cell.ColumnSpan;
    				}
    				if (this.DataSources.Count > 0)
    				{
    					this.Rows.AddRange(CreateTableRows());
    					if (this.FooterRows.Count > 0)
    						this.Rows.AddRange(this.FooterRows.ToArray());
    				}
    				else
    				{
    					TableCell cell = new TableCell();
    					cell.ColumnSpan = colspan;
    					cell.Text = "No datas";
    					TableRow row = new TableRow();
    					row.Cells.Add(cell);
    					this.Rows.Add(row);
    				}
    			}
    			catch (Exception ex)
    			{
    				throw new Exception("Cannot build table at the moment.", ex);
    			}
    		}
            }
    Voilà =)
    Si tu as des questions n'hésites pas ^^; je ne sais pas si j'ai été clair =)

    et surtout... merci pour ton aide !!! et surtout d'avoir répondu aussi vite =)

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

Discussions similaires

  1. Custom WebControl : LoadPostData pas apellé
    Par Sergejack dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/03/2012, 09h00
  2. Custom WebControl : erreurs
    Par conan76 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 23/06/2011, 14h06
  3. [ASP 1.1/C#] Custom Web Control et ViewState
    Par User.Anonymous dans le forum ASP.NET
    Réponses: 1
    Dernier message: 07/03/2008, 14h52
  4. [2.0/C#] custom dérivée de WebControl
    Par CUCARACHA dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/10/2006, 20h53
  5. [C#] WebControl et evenements
    Par farfadet dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/10/2004, 15h01

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