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

SharePoint .NET Discussion :

[WSS 3.0] Webpart FormView : Affichage champs d'un FormView en mode Insert


Sujet :

SharePoint .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut [WSS 3.0] Webpart FormView : Affichage champs d'un FormView en mode Insert
    Bonjour à tous,

    ce post fait suite au premier que j'ai posté sur le sujet : l'affichage d'une FormView en mode insertion. Ma liaison avec la datasource a été faite (merci dnt91!), puis j'ai suivi les consignes du constructeur dans MSDN pour afficher tout cela. Si j'ai bien saisi, on doit refaire tous les templates dans un FormView (à contrario du DetailView ou ils sont implémentés automatiquement).
    Je refais donc le template de l'insertion vu que ce n'est que celui là qui m'interesse. J'y mets dedans un control qui va recevoir les différents champs que je créé également, avec un eventHandler sur le dataBinding. Ensuite j'attribue le template d'insertion au FormView et je fais un renderControl du FormView, mais rien ne s'affiche.

    J'ai 2 questions :
    - pourquoi faut il faire un eventHandler pour le DataBinding des champs qui composeront le formulaire? Je fais déjà un DataBind sur ma liste SP au niveau du formulaire, n'est ce pas suffisant?
    - pourquoi.... mon formView ne s'affiche pas?

    Voici mon code (j'ai mis la plupart des trucs dans le render, j'organiserai tout ca une fois que cela marchera, ne hurlez pas )

    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
     
            private sealed class InsertTemplate : ITemplate
            {
                void ITemplate.InstantiateIn(Control container) 
                {
                    Label FieldPTOStart = new Label();
                    FieldPTOStart.ID = "PTOStart";
                    FieldPTOStart.DataBinding += new EventHandler(FieldPTOStart_DataBinding);
     
                    container.Controls.Add(FieldPTOStart);
                }
     
                private void FieldPTOStart_DataBinding(Object sender, EventArgs e)
                {
                    Label FieldPTOStartControl = (Label)sender;
                    FormView formViewContainer = (FormView)FieldPTOStartControl.NamingContainer;
                    DataRowView rowView = (DataRowView)formViewContainer.DataItem;
                    FieldPTOStartControl.Text = rowView["PTOStart"].ToString();
                }
     
            }
     
            protected override void Render(HtmlTextWriter writer)
            {
                try
                {
                    writer.Write("<br><h3>Request a new PTO</h3>");
     
                    // create DataSource for FormView
                    SPDataSource ds = new SPDataSource();
                    ds.List = SPContext.Current.Web.Lists["PTO"];
                    ds.DataSourceMode = SPDataSourceMode.List;
                    ds.Scope = SPViewScope.RecursiveAll;
                    // instanciate new FormView
                    FormView newPTOFV = new FormView();
                    // set default parameters
                    newPTOFV.AllowPaging = false;
                    newPTOFV.HeaderText = "HeaderText: New PTO";
                    newPTOFV.DefaultMode = FormViewMode.Insert;
                    // bind the FormView
                    newPTOFV.DataSource = ds;
                    newPTOFV.DataBind();
     
                    // create custom template
                    newPTOFV.InsertItemTemplate = new InsertTemplate();
                    writer.Write("Nb of records found in the datasource : " + newPTOFV.DataItemCount.ToString());
                    newPTOFV.RenderControl(writer);
                }
                catch (Exception GenericEx)
                {
                    writer.Write("An error has occured: " + GenericEx.Message);
                }
            }
    Merci pour votre aide!

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 760
    Par défaut
    Salut,

    Pour le rendu de ton formView, il faudrait peut-etre l'ajouter à la collection de controle de ton composant, sinon c'est normal qu'il ne s'affiche pas, vu qu'il n'est pas présent.
    Il te manque donc qqch du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.Controls.Add(newPTOFV)
    Le databibing de permet de déclencher le chargement des données dans ton controle, donc si tu réalises des opérations après cet évenement, tu n'as pu besoin de requeter ta source de données étant donné que tes données sont dans ton controle; d'ailleurs tu l'utilises dans ta meth FieldPTOStart_DataBinding

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Par défaut
    Salut!

    tout à fait d'accord, j'avais un peu oublié le Controls.Add. Du coup je fais les choses bien cette fois (enfin..mieux), avec un vrai CreateChildControls(). Je désactive donc l'eventHandler qui lie les données lors de la création du champ pour ne garder que le général, et je fais un rendu du ChildControl...
    mais je n'ai toujours rien...

    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
     
            private sealed class InsertTemplate : ITemplate
            {
                void ITemplate.InstantiateIn(Control container) 
                {
                    Label FieldPTOStart = new Label();
                    FieldPTOStart.ID = "PTOStart";
                    container.Controls.Add(FieldPTOStart);
                }
            }
     
            protected override void CreateChildControls()
            {
                base.CreateChildControls();
     
                // create custom template
                newPTOFV.InsertItemTemplate = new InsertTemplate();
     
                // create DataSource for FormView
                SPDataSource ds = new SPDataSource();
                ds.List = SPContext.Current.Web.Lists["PTO"];
                ds.DataSourceMode = SPDataSourceMode.List;
                ds.Scope = SPViewScope.RecursiveAll;
     
                // bind the FormView
                newPTOFV.DataSource = ds;
                newPTOFV.DataBind();
     
                // set newPTOFV's default parameters
                newPTOFV.AllowPaging = false;
                newPTOFV.DefaultMode = FormViewMode.Insert;
     
                Controls.Add(newPTOFV);
            }
     
     
            protected override void Render(HtmlTextWriter writer)
            {
                try
                {
                    EnsureChildControls();
     
                    writer.Write("<br><h3>Request a new PTO</h3>");
                    newPTOFV.RenderControl(writer);
                    writer.Write(newPTOFV.DataItemCount.ToString() + " record(s)");
                }
                catch (Exception GenericEx)
                {
                    writer.Write("An error has occured: " + GenericEx.Message);
                }
            }

Discussions similaires

  1. affichage champ d'une table dans un etat
    Par splog dans le forum IHM
    Réponses: 3
    Dernier message: 23/02/2007, 10h19
  2. Requête : Affichage champs non vides
    Par emilie31 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/02/2007, 11h01
  3. Affichage champ de texte
    Par seurjer dans le forum Access
    Réponses: 6
    Dernier message: 05/12/2006, 11h50
  4. [C#]Comment accéder à un champ dans un FormView ?
    Par Louisa dans le forum ASP.NET
    Réponses: 8
    Dernier message: 18/07/2006, 12h05
  5. Pb affichage champ
    Par Pymm dans le forum ASP
    Réponses: 4
    Dernier message: 16/02/2005, 17h03

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