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

Messages postés
65
Date d'inscription
lundi 21 mai 2007
Dernière intervention
7 juillet 2009
- - Dernière réponse : cs_alicia26
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Dernière intervention
7 juillet 2009
- 3 sept. 2008 à 19:18
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!!
Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
21 juillet 2010
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ggtry
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
21 juillet 2010
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ggtry
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
21 juillet 2010
0
Merci
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
Commenter la réponse de ggtry
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
0
Merci
Salut,

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

Bon coding
Commenter la réponse de nhervagault
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Dernière intervention
7 juillet 2009
0
Merci
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.
Commenter la réponse de cs_alicia26
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
21 juillet 2010
0
Merci
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
Commenter la réponse de ggtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Dernière intervention
7 juillet 2009
0
Merci
merci pour ta réponse!!
mais quelle valeur mettre dans le code insert:
  sInsertSQL = "insert into matable( Prenom) values('" & l1 & "')"
    
Commenter la réponse de cs_alicia26
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
21 juillet 2010
0
Merci
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
Commenter la réponse de ggtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Dernière intervention
7 juillet 2009
0
Merci
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
Commenter la réponse de cs_alicia26
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
21 juillet 2010
0
Merci
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
Commenter la réponse de ggtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Dernière intervention
7 juillet 2009
0
Merci
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???!!
Commenter la réponse de cs_alicia26
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
21 juillet 2010
0
Merci
Bonjour,

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

GGtry
Commenter la réponse de ggtry
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
21 juillet 2010
0
Merci
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
Commenter la réponse de ggtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Dernière intervention
7 juillet 2009
0
Merci
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?
Commenter la réponse de cs_alicia26
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
21 juillet 2010
0
Merci
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
Commenter la réponse de ggtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Dernière intervention
7 juillet 2009
0
Merci
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'?
Commenter la réponse de cs_alicia26
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
21 juillet 2010
0
Merci
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
Commenter la réponse de ggtry
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Dernière intervention
7 juillet 2009
0
Merci
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!!
Commenter la réponse de cs_alicia26
Messages postés
65
Date d'inscription
lundi 21 mai 2007
Dernière intervention
7 juillet 2009
0
Merci
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!!!
Commenter la réponse de cs_alicia26

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.