Afficher détails du lien datalist [Résolu]

Signaler
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
7 juillet 2009
-
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
7 juillet 2009
-
salut à tous!
avec le code ci dessous j'affiche dans un datalist le contenu de ma base.
maintenant j'aimerai pouvoir afficher le détail sur une autre page lors d'un clic sur le lien!
 
       
            
  
 ''><%#DataBinder.Eval(Container.DataItem, "NomFamille")%>&nbsp;<%#DataBinder.Eval(Container.DataItem, "Prénom")%>
        
           
           

       
   

merci pour votre aide!!

19 réponses

Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Rebonjour,

Tu as bien une Masterpage, l'erreur est donc provoquée par page.findcontrol
Tu peux rechercher le contentplaceholder et chercher à l'intérieur DataList1, mais en l'occurrence, tu peux écrire tout simplement, pour ne pas modifier le reste :
Dim dl1 as DataList=DataList1 
à la place de 
Dim dl1 As DataList = CType(Page.FindControl("DataList1"), DataList)

GGtry
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
rebonjour,

Tu as "Référence Employés" avec un espace. Si tu as mis un espace dans ta table, tu dois mettre des crochets et écrire [Référence Employés].
Pour le reste je ne sais pas (je ne crois pas que les accents posent problèmes, mais ce n'est sûr).
Essaie déjà avec cela.

GGtry
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonjour,

Pour cela, tu peux utiliser un hyperlink asp en renseignant ainsi la propriété navigateurl :

NavigateUrl='<%# "page_destination.aspx?idchamp=" + DataBinder.Eval(Container.DataItem, "TonChamp").ToString() %>'

où "page_destination.aspx" est la nouvelle page à afficher, "idchamp" le nom de la variable que tu passes dans l'adresse, que tu renseignes dans databinder etc. avec l'information de ta table (ici "TonChamp") que tu dois passer à la nouvelle page.
Dans cette page de destination, tu peux alors récupérer cette information en choisissant querystring comme selectparameter lorsque tu définis ta datasource.

GGtry
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
Salut,

Tu veux un popup
il faut utiliser window.open de javascript dans ton lien HREF

Bon coding
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
7 juillet 2009

merci pour vos réponses!
je vais tester vos réponses plus tard car en entendant j'ai essayé de contourner mon problème en utilisant un gridview et un datalist.
seulement j'aimerai insérer certains champs de mon datalist et quelques textbox dans une autre table ,pour les textbox,c'est juste idtextbox.text pour récuperer la valeur alors j'ai essayer cette formule pour un champ du datalist:
Dim p As Label = CType(DataList1.FindControl("PrénomLabel"), Label)
 Dim prenom As String = p.Text

lorsque je clique sur "ENVOYER" cela m'affiche
La référence d'objet n'est pas définie à une instance d'un objet.

des suggestions?!
merci.
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonjour,

Normalement, autre thème, autre post... mais bon.
Tu sembles oublier que, dans une datalist, ton Label sera présent autant de fois qu'il y aura de lignes. Selon les événements, les méthodes de récupération seront différentes.
Dans ton cas, si tu veux parcourir toute ta liste une fois qu'elle est créée, tu dois faire quelque chose du genre (tu peux aussi utiliser un for each) :

 Dim dl1 As DataList = CType(Page.FindControl("DataList1"), DataList)
        For i as integer = 0 To dl1.Items.Count - 1
            Dim l1 As Label = CType(dl1.Items(i).FindControl("PrenomLabel"), Label)
            ...
        Next

Si toutefois tu travaillais sur un événement de ta liste comme itemdatebound (qui concerne chaque item un à un et pas la liste entière), tu pourrais alors le récupérer ainsi :

 Dim l1 As Label = CType(e.Item.FindControl("PrenomLabel"), Label)

GGtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
7 juillet 2009

merci pour ta réponse!!
mais quelle valeur mettre dans le code insert:
  sInsertSQL = "insert into matable( Prenom) values('" & l1 & "')"
    
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
C'est un label, donc l1.text.
L'insert est bien entendu à mettre dans la boucle le cas échéant.
Mais je ne vois pas exactement ce que tu cherches à faire ...

GGtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
7 juillet 2009

juste une insertion des champs du datalist et d'autres textbox dans une même table
voici mon code insert
 Sub Insert_Click(ByVal Src As Object, ByVal E As EventArgs)
  
        Dim cnAccess As New Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\WebSite1\App_Data\Bdd.mdb;")
        cnAccess.Open()
        Dim sIntitule, sObjet, sCont, sPay, sVil, sDeb, sFin, sDur, sInsertSQL As String
           Dim dl1 As DataList = CType(Page.FindControl("DataList1"), DataList)
        For i As Integer = 0 To dl1.Items.Count - 1
            Dim l1 As Label = CType(dl1.Items(i).FindControl("RefEmployesLabel"), Label)
            Dim l As Label = CType(dl1.Items(i).FindControl("NomFamilleLabel"), Label)
            Dim l3 As Label = CType(dl1.Items(i).FindControl("PrenomLabel"), Label)

        Next

        sIntitule = intitule.Text

        sObjet = objet.Text

        sCont = cont.Text

        sPay = pay.Text

        sVil = vil.Text

        sInsertSQL = "insert into Missions(RéfMission, Référence Employés, NomEmployés, IntituleMission, ObjetMission, Continent, Pays, Ville) values('" & RefEmployesLabel & "','" & l2 & "','" & l3 & "','" & sIntitule & "','" & sObjet & "','" & sCont & "'," & sPay & ",'" & sVil & "')"
     Dim cmdInsert As New Data.OleDb.OleDbCommand(sInsertSQL, cnAccess)
         cmdInsert.ExecuteNonQuery()
        Response.Write("Données Enregistrées!")
    End Sub
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
La boucle va parcourir toute ta table, dont faire un insert pour toutes tes données.
Mais tu dois mettre ta fonction d'insertion dans la boucle for... next.
Tes données sIntitule etc. doivent bien entendu être remplies avant cette boucle.

GGtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
7 juillet 2009

salut et merci pour ta réponse!
alors j'obtiens quelque chose comme:
Sub Insert_Click(ByVal Src As Object, ByVal E As EventArgs)
        Dim cnAccess As New Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\WebSite1\App_Data\Bdd.mdb;")
        cnAccess.Open()
        Dim sIntitule, sObjet, sCont, sPay, sVil, sDeb, sFin, sDur, sInsertSQL As String
     sIntitule = intitule.Text
   sObjet = objet.Text
      sCont = cont.Text
sPay = pay.Text
    sVil = vil.Text
sDeb = deb.Text
   sFin = fin.Text
     sDur = dur.Text
        Dim dl1 As DataList = CType(Page.FindControl("DataList1"), DataList)
     For i As Integer = 0 To dl1.Items.Count - 1
            Dim l1 As Label = CType(dl1.Items(i).FindControl("RefEmployesLabel"), Label)
            Dim l2 As Label = CType(dl1.Items(i).FindControl("NomFamilleLabel"), Label)
            Dim l3 As Label = CType(dl1.Items(i).FindControl("PrenomLabel"), Label)
            sInsertSQL = "insert into Missions(RéfMission, Référence Employés, NomEmployés, IntituleMission, ObjetMission, Continent, Pays, Ville, Datadebmission, DateFinmission, Durée) values('" & l1 & "','" & l2 & "','" & l3 & "','" & sIntitule & "','" & sObjet & "','" & sCont & "','" & sPay & "','" & sVil & "','" & sDeb & "','" & sFin & "','" & sDur & "')"
        Next
    Dim cmdInsert As New Data.OleDb.OleDbCommand(sInsertSQL, cnAccess)
         cmdInsert.ExecuteNonQuery()
        Response.Write("Données Enregistrées!")
    End Sub

et il m'affiche cette erreur:
L'opérateur '&' n'est pas défini pour les types 'String' et 'System.Web.UI.WebControls.Label'.

une idée???!!
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonjour,

Tu écris l1, l2 etc. Ce sont des labels. Donc : l1.text, l2.text...

GGtry
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
A propos, je n'avais pas fait attention, mais si tu exécutes ta commande sql en dehors de la boucle for... next, seul le dernier insert sera traité...

GGtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
7 juillet 2009

ok,je vois
syntaxiquement,j'obtiens ceci:
   Dim dl1 As DataList = CType(Page.FindControl("DataList1"), DataList)

        For i As Integer = 0 To dl1.Items.Count - 1
            Dim l1 As Label = CType(dl1.Items(i).FindControl("RefEmployesLabel"), Label)
            Dim l2 As Label = CType(dl1.Items(i).FindControl("NomFamilleLabel"), Label)
            Dim l3 As Label = CType(dl1.Items(i).FindControl("PrenomLabel"), Label)
            sInsertSQL = "insert into Missions(RéfMission, Référence Employés, NomEmployés, IntituleMission, ObjetMission, Continent, Pays, Ville, Datadebmission, DateFinmission, Durée) values('" & l1.Text & "','" & l2.Text & "','" & l3.Text & "','" & sIntitule & "','" & sObjet & "','" & sCont & "','" & sPay & "','" & sVil & "','" & sDeb & "','" & sFin & "','" & sDur & "')"
            Dim cmdInsert As New Data.OleDb.OleDbCommand(sInsertSQL, cnAccess)
            cmdInsert.ExecuteNonQuery()
            Response.Write("Data recorded!")
        Next

et c'est correct!
mais au débogue,çà crache avec
System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.

qu'en dis tu?
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
rebonsoir,

c'est ce que tu mets en rouge qui pose problème (c'est à dire ta datalist1) ? ou autre chose ? Si c'est cette datalist, je ne vois pas très bien, sauf si ta hiérarchie de contrôles ne permet pas d'utiliser la référence "Page" ou si tu n'as pas de contrôle dont l'id est "DataList1". Mais apparemment ce n'est pas cela...

GGtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
7 juillet 2009

bonjour
oui,c'est justement çà,je mets en rouge l'erreur qui m'est transmise à la débog. L'id de mon contrôle est bien DataList1.
Qu'appelles tu la référence 'Page'?
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonjour,

Je voulais dire page.findcontrol qui ne peut pas être utilisé par exemple avec une Master Page.


Eventuellement, si tu ne trouves pas (ça ne doit pas être grand-chose), peux-tu envoyer tout ton code (vb et asp) en "message privé" (sous ton message, à côté de Rép. et du nombre de messages envoyés, tu as "MP"), pour aller plus vite...

GGtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
7 juillet 2009

merci GGtry!
cette erreur est résolue.
Je ne sais pas si je dois faire un autre post mais au debug ,il m'affiche
Erreur de syntaxe dans l'instruction INSERT INTO.

Dim dl1 as DataList=DataList1
For i As Integer = 0 To dl1.Items.Count - 1
            Dim l1 As Label = CType(dl1.Items(i).FindControl("RefEmployesLabel"), Label)
            Dim l2 As Label = CType(dl1.Items(i).FindControl("NomFamilleLabel"), Label)
            Dim l3 As Label = CType(dl1.Items(i).FindControl("PrenomLabel"), Label)
           
sInsertSQL = "insert into Missions(RéfMission, Référence Employés,
NomEmployés, IntituleMission, ObjetMission, Continent, Pays, Ville,
Datadebmission, DateFinmission, Durée) values('" & l1.Text &
"','" & l2.Text & "','" & l3.Text & "','" &
sIntitule & "','" & sObjet & "','" & sCont & "','"
& sPay & "','" & sVil & "','" & sDeb & "','"
& sFin & "','" & sDur & "')"
            Dim cmdInsert As New Data.OleDb.OleDbCommand(sInsertSQL, cnAccess)
            cmdInsert.ExecuteNonQuery()
            Response.Write("Data recorded!")
        Next

je regarde mais je vois pas,je pense qu'un second œil sera la bienvenue.
je tiens à préciser que je ne tiens pas à insérer les données dans touts les champs.Certains sont définies NULL, et peuvent ne pas contenir des champs sur cette page, mais sur une autre!!
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
7 juillet 2009

SUPER,c'est cool
c'est justement çà,merci GGtry!!
Tu m'as vraiment retirer une grosse épine du pied,sans ton aide,je ramais encore et j'y serais pas arrivé.
Merci GGtry!!!