du kan ikke gøre det sådan .... datalisten kunne jo potentielt rendere 5000 rækker, så det med at tilgå en kontrol i en række på den måde går ikke. og det er også derfor at du ikke får en membervariabel af type Label automatisk når du opretter den i din template for listen. (går ud fra at du bruger visual studio, så du må lige rette mig, hvis jeg tager fejl).
der er flere måder du kan arbejde med kontrollerne i en sådan række på. typisk kunne man finde på at gøre det i forbindelse med databinding.
prøv f.eks. at oprette dig en handler til ItemDataBound-eventet :
Private Sub mydatalist_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs) If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then Dim label As Label = CType(ConversionHelpers.AsWorkaround(e.Item.FindControl("Label1"), GetType(Label)), Label) label.Text = "test" End If End Sub
Private Sub mydatalist_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs) Handles mydatalist.ItemDataBound If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then Dim label As Label = CType(ConversionHelpers.AsWorkaround(e.Item.FindControl("Label1"), GetType(Label)), Label) label.Text = "test" End If End Sub
... håber det er rigtigt :o) (er ikke så fiks til vb ;o)
Line 68: Private Sub mydatalist_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs) Handles mydatalist.ItemDataBound Line 69: If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then Line 70: Dim label1 As Label = CType(ConversionHelpers.AsWorkaround(e.Item.FindControl("Label1"), GetType(Label)), Label) Line 71: label1.Text = "test" Line 72: End If xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 'ConversionHelpers' is not declared. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
sikke da også noget underligt kode .... det er oversat af en oversætter :o)
prøv sådan her:
Private Sub mydatalist_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs) Handles mydatalist.ItemDataBound If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then Dim label As Label = CType(e.Item.FindControl("someControl"), Label) label.Text = "test" End If End Sub
og din handler fra før kan du så udvide med : (her forestiller jeg mig bare at du i datagrundlaget for listen har en kolonne/property der hedder rating af typen integer)
Private Sub mydatalist_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs) Handles mydatalist.ItemDataBound If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then Dim lbl As Label = CType(e.Item.FindControl("Label1"), Label) label.Text = "test"
Dim pnlStars As Panel = CType(e.Item.FindControl("pnlStars"), Panel) ' og så din rating... først datagrundlaget Dim drv As DataRowView = CType(e.Item.DataItem, DataRowView) Dim rating As Integer = CType(drv("rating"), Integer) ' så skulle du være klar til at kalde AddStars(pnlStars, rating)
End If End Sub
Private Sub AddStars(ByVal starsPanel As Panel, ByVal rating As Integer) Dim star As System.Web.UI.WebControls.Image = New System.Web.UI.WebControls.Image star.ImageUrl = "..." starsPanel.Controls.Add(star) End Sub
udfra den rating du så får med som parameter kan du så tilføje de billeder skal bruges :o) (det ene billede jeg sætter ind kan du jo ikke bruge til så meget .... det var mere så du kan se hvordan du få klasket nogle kontroller ind i en container kontrol)
jeps... det var tanken. jeg gik ud fra at du havde det i din datakilde et sted, så du skal bare skifte rating ud med hvad det nu hedder hos dig.
men altså... det nemmeste for dig ville nok være, at du samler nogle giffer der hedder 1,2,3,4,5.gif som så ser ud som de skal.... så kan du bare smutte sådan en som den her i din template:
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.