Avatar billede prunka Nybegynder
11. juli 2005 - 17:44 Der er 31 kommentarer og
1 løsning

Datalist - label is not declared

Hejsa eksperter,
jeg har et spørgsmål, som jeg har bakset med nu de seneste timer, og jeg kan sku ikke finde ud af det.

I min codebehind-fil:

Label1.text = "test"

i min .aspx-fil:

        <asp:DataList ID="mydatalist" runat="server">
       
           
 

        <ItemTemplate>
       
        'har indsat noget data her fra databasen

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
 
       
        </ItemTemplate>
        </asp:DataList>
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

når jeg kører koden, så siger den, at label1 is not declared! Hvad fejler????
Avatar billede snepnet Nybegynder
11. juli 2005 - 18:39 #1
hej prunka :o)

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 void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
  if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  {
    Label label = e.Item.FindControl("Label1") as Label;
    label.Text = "test";
  }
}

du må endelig sige til hvis du er i tvivl om noget - jeg skal nok forsøge at holde øje herude, selvom der ikke kommer mails :o)

mvh
Avatar billede prunka Nybegynder
11. juli 2005 - 18:42 #2
hej igen,
nu programmerer jeg selv i vb.net, så jeg forstår ikke liiige hvad det der du gør der :) Kan du give mig den i vb.net? :D
Avatar billede snepnet Nybegynder
11. juli 2005 - 18:45 #3
vi prøver en vb-model :o)

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

mvh
Avatar billede snepnet Nybegynder
11. juli 2005 - 18:47 #4
hovs .... du skal nok lige udvide lidt:

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)

mvh
Avatar billede prunka Nybegynder
11. juli 2005 - 18:47 #5
skal jeg så indsætte koden i code-behind filen og lade label1 stå som den er i datalist?
Avatar billede snepnet Nybegynder
11. juli 2005 - 18:49 #6
jeps - lige præcis.

du kan oprette handlere med vs, hvis du bruger de to rullegardiner der er over dit kode-view.

i den venstre vælger du mydatalist, og i den højre vælger du derefter ItemDataBound... så får du oprettet handleren.

mvh
Avatar billede prunka Nybegynder
11. juli 2005 - 18:51 #7
Jeg får følgende:

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
Avatar billede snepnet Nybegynder
11. juli 2005 - 18:54 #8
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

mvh
Avatar billede snepnet Nybegynder
11. juli 2005 - 19:00 #9
og så lige :
Dim label As Label = CType(e.Item.FindControl("Label1"), Label)

parameteren i FindControl(..) skal være det id du har angivet i templaten her <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

mvh
Avatar billede snepnet Nybegynder
11. juli 2005 - 19:01 #10
pyhh... jeg føler mig på gyngende grund i alt det vb :o)
Avatar billede prunka Nybegynder
11. juli 2005 - 19:15 #11
hehe, jeg prøver lige om det virker :)
Avatar billede snepnet Nybegynder
11. juli 2005 - 19:16 #12
hvo intet vover ;o)
Avatar billede prunka Nybegynder
11. juli 2005 - 19:18 #13
:))))))))))) Det virker!!! Giv mig et svar, så får du pointene!
Avatar billede snepnet Nybegynder
11. juli 2005 - 19:19 #14
skal du få her :o)
mvh
Avatar billede prunka Nybegynder
11. juli 2005 - 19:19 #15
tak for hjælpen! fik du pointene?
Avatar billede snepnet Nybegynder
11. juli 2005 - 19:21 #16
det var så lidt :o)
næh ... du skal vist markere mit navn, og så trykke på ok/accepter/elleretellerandet.
mvh
Avatar billede prunka Nybegynder
11. juli 2005 - 19:24 #17
nu?
Avatar billede snepnet Nybegynder
11. juli 2005 - 19:25 #18
jeps :o) - du kan også se det ved at der står accepteret svar udfra svaret, og ikke bare svar.
flaget bliver også blåt... sikken en fest :o)
mvh
Avatar billede prunka Nybegynder
11. juli 2005 - 19:26 #19
hehe, jeps! Takker for hjælpen!
Avatar billede snepnet Nybegynder
11. juli 2005 - 19:28 #20
bare helt iorden - fyr løs hvis der dukker mere op :o)
mvh
Avatar billede prunka Nybegynder
11. juli 2005 - 19:30 #21
det gør jeg ;)
Avatar billede prunka Nybegynder
11. juli 2005 - 19:42 #22
...lige et spørgsmål mere :)

I min datalist har jeg en tabel, som består af tal fra 0-5.

I mit output skal jeg have det sådan, at hvis tallet er 1, så
skal der være en:

<img src="images/star.gif"><img src="images/stargrey.gif"><img src="images/stargrey.gif"><img src="images/stargrey.gif"><img src="images/stargrey.gif">

og hvis tallet er to, så:

<img src="images/star.gif"><img src="images/star.gif"><img src="images/stargrey.gif"><img src="images/stargrey.gif"><img src="images/stargrey.gif"> osv.

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Kan du finde ud af det, hvordan man gør det i samme datalist?
Avatar billede snepnet Nybegynder
11. juli 2005 - 20:01 #23
du får lidt kode om lidt.... skal bare lige transmogriffe om til VB :o)
mvh
Avatar billede prunka Nybegynder
11. juli 2005 - 20:04 #24
hehe :)
Avatar billede snepnet Nybegynder
11. juli 2005 - 20:09 #25
det nemmeste er nok, hvis du lægger det ind i din ItemDataBound-handler (når du nu alligevel har den ;o)

nu ved jeg ikke lige hvor du har tallet fra - så der må du gerne lige give et vink :o)

du lægger en PlaceHolder eller et Panel - f.eks. sådan her (med din label fra før):

<ItemTemplate>
  <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
  <asp:Panel id="pnlStars" runat="server"></asp:Panel>
</ItemTemplate>

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)

mvh
Avatar billede snepnet Nybegynder
11. juli 2005 - 20:10 #26
(håber VB'en holder sådan nogenlunde :o)
Avatar billede prunka Nybegynder
11. juli 2005 - 20:27 #27
tak for hjælpen, men hvor er parameteren, som fortæller hvor mange stjerner man har? Er det:

Dim rating As Integer = CType(drv("rating"), Integer)

dvs., at rating fortæller hvor mange stjerner der er?
Avatar billede snepnet Nybegynder
11. juli 2005 - 20:29 #28
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:

<asp:Image ImageUrl='<%# String.Format("stars{0}.gif", DataBinder.Eval(Container, "DataItem.Rating")) %>' ></asp:Image>

mvh
Avatar billede prunka Nybegynder
11. juli 2005 - 20:31 #29
ok, på den måde, det kan jeg godt gøre. Jeg prøver! Du er en mester ;)
Avatar billede prunka Nybegynder
11. juli 2005 - 20:34 #30
det virker sku godt med:

<asp:Image ImageUrl='<%# String.Format("stars{0}.gif", DataBinder.Eval(Container, "DataItem.Rating")) %>' ></asp:Image>

takker mange gange!
Avatar billede snepnet Nybegynder
11. juli 2005 - 20:35 #31
har du en messengerkonto? - så kan jeg lige tilføje dig her... så kan vi tage den over messenger.... det er lidt hurtigere.
mvh
Avatar billede prunka Nybegynder
11. juli 2005 - 20:36 #32
jepsen: kari_hj@hotmail.com
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester