Afficher détails du lien datalist

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

19 réponses

ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
3 sept. 2008 à 15:01
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
3
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
3 sept. 2008 à 19:03
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
3
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
1 sept. 2008 à 19:06
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
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
1 sept. 2008 à 19:06
Salut,

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

Bon coding
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_alicia26 Messages postés 65 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 7 juillet 2009
1 sept. 2008 à 19:41
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.
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
1 sept. 2008 à 20:04
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
0
cs_alicia26 Messages postés 65 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 7 juillet 2009
1 sept. 2008 à 20:20
merci pour ta réponse!!
mais quelle valeur mettre dans le code insert:
  sInsertSQL = "insert into matable( Prenom) values('" & l1 & "')"
    
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
1 sept. 2008 à 20:35
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
0
cs_alicia26 Messages postés 65 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 7 juillet 2009
1 sept. 2008 à 20:40
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
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
1 sept. 2008 à 20:50
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
0
cs_alicia26 Messages postés 65 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 7 juillet 2009
2 sept. 2008 à 18:56
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???!!
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
2 sept. 2008 à 19:16
Bonjour,

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

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