coulis
Messages postés121Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention24 juin 2010
-
7 juin 2005 à 18:48
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 2010
-
10 juin 2005 à 09:57
Mais
je n'arrive pas à le faire fonctionner ? j'ai réalisé l'exemple mais nada. Il y a un
fichier joint à télécharger pour l'exemple au complet mais j'ai une
erreur à l'ouverture du fichier. Je pense qu'il me manque des bouts de
code mais je ne vois pas! A moins que ce ne soit le DataRowView qui
n'est pas renseigné? J'ai essayer en simplifiant mais rien ?
Merci d'avance
Thierry
A voir également:
Probleme sur un exemple de code pour un repeater tout en code Behind
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 10 juin 2005 à 00:13
Je viens de prendre le temps de regarder, donc
tu as dans ton databound, la propriété
e.item.dataitem dans mon cas le type de ce controle etait un {System.Data.DataRowView}
donc dans l'uc
public property data as System.Data.DataRowView
get
return _data
end get
set(byval value as System.Data.DataRowView)
_data = value
end set
end property
mais ca, ca depend peut etre de ce que tu met en datasource donc faut
mettre un point d'arret et regarder, attention, lors du premier
declenchement de l'evenement, e.item est vide ...
ensuite une fois que t'as recupéré e.item.dataitem tu peux l'utiliser
dans ton UC comme tu le faisais avec tes Container.dataitem("nomchamp")
sauf que la c'est data("nomchamp")
mais comme t'as l'air d'avoir envie de faire du .net 2, ca a tout
changé, le datagrid a completement était repensé, et il y a un nouveau
controle : le gridview ce qui rend (enfin !) le datagrid obsolete ...
le gridview est pas trop mal ... j'ai pas poussé l'expérimentation (seulement pour le rendu HTML mais c'est malheureusement encore pas ca ...)
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 8 juin 2005 à 02:01
Tu peux nous dire ce que tu veux faire ?
et aussi montrer le code que tu as, ainsi que l'erreur rencontrés ?
j'ai pas regardé la source plus que ca, donc je peux pas te dire si ca
marche ou pas :p
coulis
Messages postés121Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention24 juin 2010 8 juin 2005 à 08:45
Voici un exemple simplifié:
J'ai un fichier aspx (essai.aspx) avec un repeater et UC
(nosselections22.ascx) avec un label. je souhaite reproduire à l'infini
mon UC avec les données d'une base SQLserver. UC etant inclut dans le
repeater qui se trouve dans mon fichier essai.aspx.
Lorsque je lance le navigateur il n'y a pas d'erreur mais la page est
blanche? J'ai essayé de placer un "repeater1.behind()" avec un
"repeater1
.source = dr" à plusieurs endroits mais sans succès (ce code n'apparait pas dans le fichier exemple ?)
J'ai aussi remplacer par rapport à l'exemple la propriété "
DataRowView" par "SqlDataReader
". Avec "
DataRowView" je ne parvenais pas à faire fonctionner. Je ne sais ci cela à de l'influance.
Merci pour tout et à bientôt
Thierry
Voici mon code
Fichier essai.aspx :
essai
essai
Fichier essai.aspx.vb:
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.UI.WebControls
Public Class essai
Inherits System.Web.UI.Page
#Region " Code généré par le Concepteur Web Form "
'Cet appel est requis par le Concepteur Web Form.
Private Sub InitializeComponent()
End Sub
Private components As System.ComponentModel.IContainer
Protected WithEvents WebCustomControl11 As CustomLabel.WebCustomControl1
Protected WithEvents Repeater1 As System.Web.UI.WebControls.Repeater
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
'REMARQUE : la déclaration d'espace réservé suivante est requise par le Concepteur Web Form.
'Ne pas supprimer ou déplacer.
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN : cet appel de méthode est requis par le Concepteur Web Form
'Ne le modifiez pas en utilisant l'éditeur de code.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Public Sub Repeater1_ItemDataBound(ByVal sender As
Object, ByVal e As RepeaterItemEventArgs) Handles
Repeater1.ItemDataBound
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 8 juin 2005 à 12:40
c'est normal, ce que fais ton code (j'ai pas regardé les détails)
mais à chaque fois que asp.net va binder une nouvelle ligne tu remplis ton nosselection22
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Public Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Handles Repeater1.ItemDataBound
If (e.Item.ItemType = ListItemType.Item) Then
CType(e.Item.FindControl("NosSelection221"), nosselection22).SetData(CType(e.Item.DataItem, SqlDataReader))
Repeater1.DataBind()
End If
End Sub
Or tu n'as aucune données dans ton repeater, donc aucune ligne, donc l'evenement itemdatabound n'est jamais déclenché
il faudrais donc faire un rpt1.datasource puis un databind.
et c'est la que je comprend pas trop, quand tu dis infini ?? je pige pas, l'infini c'est trés grand :D
Et dans ce cas la, si tu veux repeter ton controle une 20aine de fois, es tu sur de vouloir mettre un repeater ? ok il peut y avoir des trucs sympas, mais peut etre pas utile ...
Mais la je sais pas, ce que tu veux faire :-) donc ca depend de ton utilisation
une simple boucle for suffirait peut etre ?
sinon pour faire afficher n fois un repeater, sans lui mettre des données euh ....
c'est un peu stupide quand meme :D mais un truc du genre
dim s() as string
for i as integer = 0 to 20
s(i) = i
next
coulis
Messages postés121Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention24 juin 2010 8 juin 2005 à 14:25
Hello Cyril,
Merci pour ta réponse. "Infini" ce n'est pas le bon mot sorry, "pas limité" c'est mieux puisque je puise mes infos dans un BD.
Je ne suis pas chez moi cet après midi, je vais voir ce que je peux faire avec ta réponse et je te tien informé.
Merci encore
coulis
Messages postés121Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention24 juin 2010 9 juin 2005 à 12:22
Nada je n'arrive pas
Je t'esplique ce que je souhaite et si tu pouvais m'éclairer ce serait génial
J'ai un UC (A.ascx) qui contient un "repeater" ce repeater contient differents controls (label, image..)
Je souhaite à partir de ma BD Sql server remplir ce Repeater tout en
controlant mes controls (visible etc...) et sans utiliser ce type
d'écriture dans la page <%#
DataBinder.Eval(Container.DataItem, "Marque").tostring%>
L'exemple ci-dessous ne convient pas :
Dim da As SqlDataAdapter
Dim requete As String
requete = "SELECT Marque FROM VoitMar"
Dim ds As DataSet
ds = LibData.AccesBD.GetDataSet(requete) 'acces à ma
classe de données
Repeater1.DataSource = ds.Tables(0).DefaultView
Repeater1.DataBind()
ds.Clear()
Je souhaiterais un exemple comme avec un SqlDataReader :
Dim dr As SqlDataReader
Dim requete As String
requete = "SELECT Marque FROM VoitMar"
dr = LibData.AccesBD.GetReader(requete) 'acces à ma
classe de données
Do Until Not dr.Read
Me.Label1.Text = dr("Marque")
Loop
dr.Close()
Mais dans ce dernier cas comment faire apparaitre mon repeater avec ces controls ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 9 juin 2005 à 12:38
Arf, je suis perdus, on va traiter un problème à la fois ;)
Tu veux afficher un controle x fois dans ta page ?
pour l'instant il me semble que le controle ne se repete pas, il faut donc que tu donne à manger à ton repeater, lui dire combien il y a de ligne etc...
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 9 juin 2005 à 14:00
public class tonuc
inherits UserControl
private _data as object
public property data as object
get
return _data
end get
set(byval value as object)
_data = value
end set
end property
public sub pag_load(s as object, e as eventargs) handles me.load 'ou me.databind
me.label1.text = _data("tonchamp")
end sub
end class
aprés pour savoir le type exact de data tu met un point d'arret sur la ligne
ctype(e.item.findcontrol("tonuc1"), toncontrole).data = e.container.dataitem 'e.container.Dataitem correspond à la ligne en cour de l'objet "truc"
pour connaitre le type container.dataitem qui sera aussi le type de data
Je me rappelle plus des classes etc... mais l'intellisens t'aidera plus que moi ;)
coulis
Messages postés121Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention24 juin 2010 9 juin 2005 à 15:55
"e.container.Dataitem" container n'est pas accepté par intellisens ? propose GetType ou Item ?
Voici le Sub réel comme avec tes paramêtres "container"
Public Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Handles Repeater1.ItemDataBound
If (e.Item.ItemType = ListItemType.Item) Then
CType(e.Item.FindControl("NosSelection221"), nosselection22).data = e.container.Dataitem 'e.container.Dataitem correspond à la ligne en cour de l'objet "truc"
End If
End Sub
L'autre méthode fonctionne (avec tous dans l'evenement itemdatabound du
rpt ) mais la dernière me parait quand même mieux et plus propre
mais problème