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 :

Basculer de "View" dans mon "MultiView"


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Par défaut Basculer de "View" dans mon "MultiView"
    Bonjour à tous !

    Je me retrouve confronté à un problème concernant la bascule entre deux View d'un MultiView imbriqué dans un FormView... !

    Pour résumer mon problème :

    Dans l'optique d'un projet e-commerce, je suis en train de monter une interface pour la création d'un produit, dont toutes les informations seront stockées dans une table "T_Prod" de ma base de données.

    Pour réaliser cela, j'ai déposer un FormView dans mon WebForm. Je l'ai ensuite lié à un contrôle SqlDataSource pointant vers ma fameuse table "T_Prod".

    Seulement je voudrai que certains champs présent dans ce "FormView" soient, à la base, cachés. Ils n'apparaîtraient que si une CheckbBox bien précise est cochée.
    Plus concrètement, un produit est susceptible de comporter une notice : si on clique sur la CheckBox "Notice", alors le TextBox "TB_PrixNot" (dans lequel on renseigne le prix de cette notice) apparaît, ainsi que d'autres informations propres à la notice...

    Pour ce faire, j'ai placé un MultiView au sein de mon FormView :

    Code ASPX :

    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
    <asp:FormView ID="FV_NouveauProd" runat="server" DataKeyNames="Id_Prod" DataSourceID="DS_Prod" DefaultMode="Insert" RenderOuterTable="False">
    <InsertItemTemplate>
      <div id="etape1" class="item">
        <h2>Informations générales</h2>
        <table>
          <tr>
            <td><label for="CB_Not">Notice</label></td>
            <td colspan="2"><asp:CheckBox ID="CB_Not" runat="server" AutoPostBack="True" oncheckedchanged="CB_Not_CheckedChanged" ClientIDMode="Static" /></td>
            <td></td>
          </tr>
          <asp:MultiView ID="MV_Not" runat="server">
            <asp:View ID="V_Not1" runat="server"></asp:View> <!-- On affiche rien à la base -->
            <asp:View ID="V_Not2" runat="server"> <!-- Si on clique sur la CheckBox, on affiche ça -->
              <tr class="fantome">
                <td></td>
                <td><label for="TB_RefNot">Référence *</label></td>
                <td><asp:TextBox ID="TB_RefNot" runat="server" Text='<%#Bind("RefNot_Prod")%>' MaxLength="8" ClientIDMode="Static" /></td>
                <td>
                  <asp:RequiredFieldValidator ID="RFB_RefNot" runat="server" [...]>* Champ obligatoire.</asp:RequiredFieldValidator>
                  <asp:RegularExpressionValidator ID="REV_RefNot" runat="server" [...]>Format non valide.</asp:RegularExpressionValidator>
                </td>
              </tr>
            </asp:View>
          </asp:MultiView>
        </table>
      </div>
    </InsertItemTemplate>
    </asp:FormView>
    Code-behind (VB.NET) :

    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
    Imports System.IO
    
    Partial Class Cms_Default
        Inherits System.Web.UI.Page
    
        Dim MV_Not As MultiView
    
        Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            If Not Page.IsPostBack Then
    			'Récupération du MultiView "MV_Not"
                MV_Not = TryCast(FV_NouveauProd.FindControl("MV_Not"), MultiView)
    			'Définition de la vue par défaut
                MV_Not.ActiveViewIndex = 0
            End If
        End Sub
    
        Protected Sub CB_Not_CheckedChanged(sender As Object, e As System.EventArgs)
    		'Afficher l'autre vue du MultiView
            MV_Not.ActiveViewIndex = 1
        End Sub
    
    End Class
    Mais impossible de basculer à l'autre vue de cette façon. En effet j'obtiens l'erreur suivante :

    La référence d'objet n'est pas définie à une instance d'un objet.
    Des idées pour résoudre ce problème ?

    Merci d'avance

  2. #2
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    pourquoi faire si compliqué !!!
    Pourquoi n'utilises tu pas des panel simplement ? c'est beaucoup plus pratique á mettre en place.

    Surtout que le multiview autant que je m'en souvienne et un formulaire qui s'etends sur plusieurs pages.

    Le multiview n'est donc pas tres utile dans ton cas.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Par défaut
    Merci pour ta réponse !

    J'ai utilisé un Panel comme tu l'as suggéré, mais j'obtiens la même erreur en définissant une variable globale

    que je remplie à l'évènement Page_Load

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Pan = FV_NouveauProd.FindControl('P_Not')
    Pan.Visible = False 'Fonctionne jusqu'ici
    et que je réutilise cette variable lors de l'évènement CheckedChanged

    En revanche, si dans ce dernier évènement je renseigne à nouveau le chemin complet de mon panel, ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FV_NouveauProd.FindControl("P_Not").Visible = True
    J'aimerai simplement comprendre pourquoi ?

    Et deuxième et dernière question : si je masque mon Panel, les paramètres renseignés dans les contrôles de celui-ci seront-ils occultés ? (l'avantage avec le MultiView était qu'en désactivant une vue, je désactivais par la même occasion tous ses contrôles et donc mon ValidationGroup ne prenait plus ces derniers en compte).

  4. #4
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    as tu deja programmé en asp.net ?
    si non je te conseille vivement de faire quelques tutoriaux.

    Le panel c'est dans la page aspx qu'il faut le definir et pas dans le code behind.
    De plus utilise plutot des divs qu'un tableau pour positionner tes élements!

    tu mets ton code dans un updatepanel et lorsque tu cliques sur ta checkbox tu affiches ou non le panel.

    Mais lis quelques tutoriaux.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Par défaut
    J'avoue être relativement nouveau dans le domaine de l'ASP.NET, mais je sais effectivement qu'il faut que je définisse mon Panel dans la page aspx... Ce que j'essayais de faire dans mon précédent poste ce n'était pas de le déclarer mais bien de le "récupérer" dans une variable pour l'utiliser par la suite.

    Bref j'ai trouvé comment faire, merci encore pour ton aide.

    Je voulais juste savoir pourquoi tu me conseilles d'utiliser des <div> plutôt qu'un tableau ? En-dehors de la nouvelle tendance à oublier les tableaux pour les reléguer par cette balise neutre pour styler de manière plus libre, quel est l'intérêt ici ?

  6. #6
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Le probleme des tableaux est qu'il ne s'affiche que lorsque tout son contenu est chargé. Donc si gros tableau, ta page s'affichera en une fois mais tres long.

    Tandis qu'avec des div la page se charge au fur et á mesure.

    En plus dans ton cas mettre un panel dans un tr te laisse moins de possibilité que dans des div.

    c'est tout

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/03/2013, 05h09
  2. [vbnet 1.1]Inserer deux simple quote sans texte dans une db
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 8
    Dernier message: 15/03/2007, 08h51
  3. Réponses: 5
    Dernier message: 15/04/2005, 14h22

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