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

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

ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 3 sept. 2008 à 15:01
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ggtry
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 3 sept. 2008 à 19:03
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ggtry
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 1 sept. 2008 à 19:06
0
Utile
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
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 1 sept. 2008 à 19:06
0
Utile
Salut,

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

Bon coding
Commenter la réponse de nhervagault
cs_alicia26 65 Messages postés lundi 21 mai 2007Date d'inscription 7 juillet 2009 Dernière intervention - 1 sept. 2008 à 19:41
0
Utile
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
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 1 sept. 2008 à 20:04
0
Utile
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
cs_alicia26 65 Messages postés lundi 21 mai 2007Date d'inscription 7 juillet 2009 Dernière intervention - 1 sept. 2008 à 20:20
0
Utile
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
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 1 sept. 2008 à 20:35
0
Utile
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
cs_alicia26 65 Messages postés lundi 21 mai 2007Date d'inscription 7 juillet 2009 Dernière intervention - 1 sept. 2008 à 20:40
0
Utile
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
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 1 sept. 2008 à 20:50
0
Utile
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
cs_alicia26 65 Messages postés lundi 21 mai 2007Date d'inscription 7 juillet 2009 Dernière intervention - 2 sept. 2008 à 18:56
0
Utile
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
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 2 sept. 2008 à 19:16
0
Utile
Bonjour,

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

GGtry
Commenter la réponse de ggtry
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 2 sept. 2008 à 19:34
0
Utile
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
cs_alicia26 65 Messages postés lundi 21 mai 2007Date d'inscription 7 juillet 2009 Dernière intervention - 2 sept. 2008 à 20:08
0
Utile
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
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 2 sept. 2008 à 21:19
0
Utile
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
cs_alicia26 65 Messages postés lundi 21 mai 2007Date d'inscription 7 juillet 2009 Dernière intervention - 3 sept. 2008 à 09:47
0
Utile
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
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 3 sept. 2008 à 11:34
0
Utile
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
cs_alicia26 65 Messages postés lundi 21 mai 2007Date d'inscription 7 juillet 2009 Dernière intervention - 3 sept. 2008 à 18:31
0
Utile
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
cs_alicia26 65 Messages postés lundi 21 mai 2007Date d'inscription 7 juillet 2009 Dernière intervention - 3 sept. 2008 à 19:18
0
Utile
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.