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 :

Double binding pour un champ de BdD


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Par défaut Double binding pour un champ de BdD
    Bonjour à tous,
    Voilà j'ai un problème un peu au-dessus de mes compétences.

    Dans l'app que je développe, j'ai un module de gestion du courrier et un module de gestion des contacts.
    Dans la gestion des courriers, je voudrais pouvoir insérer un contact référencé dans ma liste contact, et un contact non référencé.

    Voici comment je procède :
    J'ai une table Courrier_tbl dans laquelle j'enregistre tous les courriers.
    J'ai une DropDownList qui me renvoie la liste des contacts enregistrés dans ma table contact. J'ai également une TextBox qui me sert à enregistrer un courrier pour un contact qui n'est pas dans la liste. Ces deux contrôles (DropDownList et TextBox) sont Bindés au même champ de la table Courrier_tbl.

    Je voudrais que lorsque la DropDownList a une certaine valeur (par exple : "Inconnu"), que le nom du contact à enregistrer pour ce courrier soit pris dans la TextBox.

    Voici ce que j'ai fais :

    page aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <td>Destinataire :<br />
           <asp:DropDownList ID="ddlDestinataire" runat="server" Text='<%# Bind("destinataire") %>'
           DataSourceID="dsContact" DataTextField="nom" DataValueField="nom" Width="153px">
           </asp:DropDownList>
           Ou
           <br />
           <asp:TextBox ID="txtDestinataire" runat="server" Text='<%# Bind("destinataire") %>'>
           </asp:TextBox>        
    </td>
    Notez que les deux contrôles sont Bindés au même champ : destinataire.

    Code 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
     
        Protected Sub ChoixDest(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim ContactReg As DropDownList = CType(fvwCourrierDep.Controls.Item(0).Controls(1).Controls.Item(0).Controls.Item(3), DropDownList)
            Dim ContactInc As TextBox = CType(fvwCourrierDep.Controls.Item(0).Controls(1).Controls.Item(0).Controls.Item(5), TextBox)
            If ContactReg.Text = "(Inconnu)" Then
                ContactReg.ClearSelection()
                ContactReg.Enabled = False
            Else
                ContactInc.Enabled = False
                ContactReg.Enabled = True
                ContactReg.DataSourceID = "dscontact"
                ContactReg.DataTextField = "nom"
                ContactReg.DataValueField = "numContact"
            End If
        End Sub
    Protected Sub ChoixDest est déclenché sur clic sur le bouton Inser du FormView qui contient la DropDownList et la TextBox.

    ContactReg représente la DropDownList pour les contacts enregistrés et ContactInc, la TextBox pour les contacts inconnus.

    En procédant comme ceci, l'enregistrement se fait avec la valeur du contrôle que je déclare en dernier dans la balise <InserItemTemplate> du Formview qui les contient, en l'occurence ici la TextBox, même si je choisis une valeur autre que "(Inconnu)" dans la DropDownList.

    A votre avis comment puis-je m'en sortir ?

  2. #2
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Je pense que tu va ajouter un <item> à ta DDL (Inconnu).
    ensuite tu va aller activer l'évènement "SelectedItemChanged" de ta DDL et tu vas lui faire un If ou un Select CASE (ce dernier étant mieu au cas où il faudrait que tu teste plus d'une valeur dans un avenir plus ou moins proche)

    Et tu va tester le seletedValue et dans le Case où il est égale à "inconnu" tu va gerer l'affichage de ta DDL et de ta TextBox.

    Je pense qu'avec ça tu devrais t'en en tout cas voilà l'esprit du truc que je ferais dans ton cas, il ne te reste plus qu'à faire le code.........

    Kenavo

  3. #3
    Membre averti
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Par défaut
    C'est justement au niveau du code que je bloque.

    Comment faire pour que seul le binding de la DropDownList soit pris en compte dans un cas, et celui de la TextBox dans l'autre cas ?

  4. #4
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Tu t'en fout, tu charge les deux et tu travaille sur le Visible de l'un ou de l'autre.
    Tu feras le tri avant d'envoyer l'insert de ton formView pour prendre celui qui est en Visivble = True

    Sinon, j'ai pas tout compris au problème.

    Kenavo

  5. #5
    Membre averti
    Inscrit en
    Août 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 44
    Par défaut
    J'ai trouvé une solution. C'est pas la plus académique, mais ça marche.
    En fait, j'ai fait un copier/coller du FormView qui contient la DropDownList et la TextBox, de façon à avoir deux FormView tout à fait identiques.
    Je mets les FormView dans un MultiView, chacun dans un View.
    Sur le 1er FormView, je binde la dropdownlist à la table Contact et sur le second, je binde la textbox. Et ensuite je gère l'affichage. Avec en plus les deux dropdownlist en Autopostback=True.

    ça donne 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
     
        Protected Sub Inconnu(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim ContactReg As DropDownList = CType(fvwCourrierDep.Controls.Item(0).Controls(1).Controls.Item(0).Controls.Item(3), DropDownList)
            Dim ContactInc As DropDownList = CType(fvwCourrierDep2.Controls.Item(0).Controls(1).Controls.Item(0).Controls.Item(3), DropDownList)
            Dim Choix As Integer
            If ContactReg.SelectedIndex = 0 Then
                mvwContact.ActiveViewIndex = 1
                ContactInc.SelectedIndex = 0
            Else
                Choix = ContactReg.SelectedIndex
                ContactInc.SelectedIndex = Choix
                mvwContact.ActiveViewIndex = 0
            End If
        End Sub
     
        Protected Sub Regulier(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim ContactReg As DropDownList = CType(fvwCourrierDep.Controls.Item(0).Controls(1).Controls.Item(0).Controls.Item(3), DropDownList)
            Dim ContactInc As DropDownList = CType(fvwCourrierDep2.Controls.Item(0).Controls(1).Controls.Item(0).Controls.Item(3), DropDownList)
            Dim Choix As Integer
            If ContactInc.SelectedIndex <> 0 Then
                Choix = ContactInc.SelectedIndex
                ContactReg.SelectedIndex = Choix
                mvwContact.ActiveViewIndex = 0
            Else
                ContactInc.SelectedIndex = 0
                mvwContact.ActiveViewIndex = 1
            End If
        End Sub
    Et ça marche parfaitement, enfin, je crois.

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

Discussions similaires

  1. Editeur de propriété pour champs de BDD
    Par Teaniel dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/07/2010, 14h26
  2. PB modification du type d'un champ ds BDD
    Par vanoou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/01/2005, 16h01
  3. Double occurence d'un champ dans un requete
    Par neness dans le forum SQL
    Réponses: 4
    Dernier message: 19/05/2004, 10h31
  4. changement de type pour un champ dans une table
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/02/2004, 15h26
  5. faire un insert pour un champ blob
    Par tripper.dim dans le forum InterBase
    Réponses: 10
    Dernier message: 02/05/2003, 16h56

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