Recuperation de valeur dans une datalist

cs_drakula Messages postés 2 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 27 août 2004 - 25 août 2004 à 12:48
cs_drakula Messages postés 2 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 27 août 2004 - 27 août 2004 à 09:59
Salut la compagnie !
Voila j'ai un leger soucis, je voudrais recuperer la valeur d'une checkbox html qui est contenue dans une datalist dont voici le source :

  <SelectedItemStyle Wrap= "False"></SelectedItemStyle>
  <EditItemStyle Wrap="False"></EditItemStyle>
  
  <SeparatorStyle Wrap="False"></SeparatorStyle>
    
  
" 
                     title ="<%#Container.DataItem("Name")%>" 
                     runat="server" >

                    <%#Container.DataItem("Name")%>
        
  



Dans mon code behind, j'ai déclaré une variable "checkbox" de type System.Web.UI.HtmlControls.HtmlInputCheckBox
et mon recuperer celle-ci voila comment je m'y prend :

Dim listItem As DataListItem
Dim cbxTest As System.Web.UI.HtmlControls.HtmlInputCheckBox
 
For Each listItem In dlProductRange.Items
    cbxTest = CType(listItem.FindControl("cbxPR"), 
                              System.Web.UI.HtmlControls.HtmlInputCheckBox) 
     Response.Write( cbxTest.Value() & "
")
Next


La methode findControl me renvoi null a chaque fois
Alors ma question est : Où est le probleme ?

font=Comic Sans MS]C'est pô moi, j'ai rien touché !Sans MS

3 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
26 août 2004 à 13:40
Le pourquoi du problème ce n'est pas compliqué, ca vient de cette ligne

cbxTest = CType(listItem.FindControl("cbxPR"),
System.Web.UI.HtmlControls.HtmlInputCheckBox)

Car qd tu recherche cbxPR il n'existe pas. Ton Datalist va te modifier l'id du Checkbox, pour que celui ci devienne unique, en effet dans ton datalist, tu as <INPUT type="checkbox" name="cbxPR" id="cbxPR" et chaque balise input doit avoir un name et id unique.

Mais je me rappelle plus comment faire ca proprement, il existe bien des bidouilles car il me semble que l'id du checbox sera de la forme cbxpr1 et le suivant cbxpr2 etc... donc l'astuce consisterait à faire une boucle de ce genre

dim i as integer

For Each listItem In dlProductRange.Items
i += 1
cbxTest = CType(listItem.FindControl("cbxPR" & i.tostring),
System.Web.UI.HtmlControls.HtmlInputCheckBox)
Response.Write( cbxTest.Value() & "
")
Next

mais je trouve pas cette méthode tres propre ... et comme j'ai pas l'habitude de travailler avec ces objets, je ne sais plus comment le faire proprement (et ca m'enerve !!!)

Je recherche ca, et je te redis

@+

Cyril
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
26 août 2004 à 13:49
Voici une solution non testé.
Cette solution est un peu plus propre, mais aussi un peu plus bourrin ... :big)

Ce que je fais : je fais une nouvelle class : qui est une collection de Checkbox

    Private Class CheckBoxCollection
        Inherits CollectionBase

        Default ReadOnly Property Item(ByVal index As Int32) As CheckBox
            Get
                Return CType(Me.List.Item(index), CheckBox)
            End Get
        End Property

        Public Function Add(ByVal Check As CheckBox) As CheckBox
            Me.List.Add(Check)
            Return Check
        End Function

    End Class


puis je regarde tout les controls du datalist, et si il y en a qui est un checkbox, je l'ajoute à la collection

        Dim CheckBoxColl As New CheckBoxCollection

        For Each c As Control In dl.Controls
            Try
                CheckBoxColl.Add(CType(c, CheckBox))
            Catch ex As Exception
            End Try
        Next

        For Each Check As CheckBox In CheckBoxColl
            Response.Write(Check.Text & " " & Check.Checked)
        Next

(dl est le nom du datalist)

attention, ca met tout les checkbox du datalist ... si tu veux ajouter juste les checkbox ayant l'id cbxPR il faudrais surement faire un truc de ce genre :

            Try
                Dim Check As CheckBox = CType(c, CheckBox)
                If Check.ClientID.Substring(5) = "cbxPR" Then
                    CheckBoxColl.Add(Check)
                End If
            Catch ex As Exception
            End Try


Je sais pas si ca marche, car j'ai pas testé, mais je vois pas de problème, par contre j'emet un gros doute pour le dernier bout de code :)

@+

Cyril
0
cs_drakula Messages postés 2 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 27 août 2004
27 août 2004 à 09:59
OKI Merci ;-)
vais essayer ca et pis on verra...;-)

C'est pô moi, j'ai rien touché !
0
Rejoignez-nous