Avatar billede hlt Juniormester
28. september 2007 - 12:33 Der er 18 kommentarer og
1 løsning

Hente værdi i forview

Hej
Jeg har et forview hvor jeg selvfølgelig henter data ud i forskellige labels og tekstfelter, og det virker også fint nok. Der er et felt i dette forview som skal bruges til at vise det samme billede. Det vil sige at hvis feltet indeholder 3, skal der vises 3 stjerner. men jeg kan ikke tilgå denne værdi med mindre jeg laver en label. Jeg ville gerne hente denne værdi ud, og så i en for løkke lave x antal stjerner. Er der nogen der har en måde hvorpå dette kan gøres eller en alternativ måde at få vist stjernerne på.
Avatar billede neoman Novice
29. september 2007 - 14:21 #1
Du refererer formentligt til FormView ?

Hvar er problemet med at hente værdien i en label og tage den ud derfra ? Ingen siger at den label behøver at være Visible.

Et rodet alternativ kunne være at i ASPX siden kalde en metode som med den bundne værdi fra db'en som input f.eks. leverer navnet på en fil med et billede (hvor du så har forskellige billeder, med 1,2..N stjerner) og lægger den ind i SRC parameteren på et IMG tag.
Avatar billede hlt Juniormester
29. september 2007 - 23:19 #2
Ja præcis(Formview). Det jeg havde tænkt mig var at lave en for løkke som så kunne udskriv x antal stjerner alt efter værdien i dette felt i databasen. Men Jeg har allerede prøvet at hente værdien ud af en label, men det ser ikke ud til at jeg kan tilgå labelen fra løkken. Synes egentligt det virker lidt underligt da det jo er normalt er temmeligt simpelt at tilgå en værdi ved hjælp af id. Nu er jeg temmelig ny i asp.net, så der er sikkert noget jeg har misset.
Avatar billede neoman Novice
29. september 2007 - 23:25 #3
vis koden fra code-behind

Når det sidder i et FormView så er der lige nogle ting man skal huske, så derfor hit med den :)
Avatar billede hlt Juniormester
30. september 2007 - 11:30 #4
hej igen
Jeg har taget udsnittet med itemtemplate, hvor jeg skal vise stjernerne. Jeg har indsat noget kode for at illustrere havd der er jeg har tænkt mig. Jeg har forsøgt nogle forskellige ting, men får fejl på dem alle sammen. jeg troede egentligt at jeg kunne bruge  #bind("tour") værdien i for løkken, men den kan man kun bruge i forbindelse med en kontrol. Tusind tak for hjælpen.
<ItemTemplate>
  <table width="100%" class="orangeText" border="0">
      <tr>
        <td class="orangeText_header" colspan="2">Medlems info</td>
        <td>Tour de LMP:<asp:Label ID="Labelimg" runat="server" Text='<%# Bind("tour") %>'></asp:Label>
        <%
        Dim counter
        counter = FormView1.FindControl("Labelimg")
        For counter = 0 To counter.Text
        %>
        <asp:Image ID="Image2" runat="server" ImageUrl="~/images/tourstar.gif" />
        <%Next%>
        </td>
      </tr>
Avatar billede neoman Novice
30. september 2007 - 11:48 #5
Det er en ikke optimal praksis at blande kode og præsentation.

Du skal have fat i OnDataBound eventet.

I designeren, marker dit formview, og i property-listen klik på Lynet. Dobbeltklik der hvor der står DataBound, så får du en kodestump i din code behind.

Derinde får du fat i din label med counter=(label)FormView1.FindControl("Labelimg").text;

Det bedste ville nok være at lave forskellige images, hvert med det antal stjerner du vil have. Baseret på counter kan du så vælge navnet :

myImage = (image)FormView1.FindControl("Image2");
myImage.ImageUrl= urlen_på_billedet, afh af værdien af counter
Avatar billede neoman Novice
30. september 2007 - 11:54 #6
eller på vb'sk:

Dim counter as Integer=Ctype(FormView1.FindControl("Labelimg"),Label).Text
Dim myImage as Image = Ctype(FormView1.FindControl("Image2"),Image)

Select Case counter
Case 1
  Image.ImageUrl= "filepath1"
Case 2
Image.ImageUrl = "filepath2"
..
End Select
Avatar billede neoman Novice
30. september 2007 - 11:54 #7
oops . myImage.ImageUrl osv..
Avatar billede neoman Novice
30. september 2007 - 11:59 #8
du kan bruge Eval i stedet for Bind (bind er two-way, og skal derfor sidde i en kontrol), mens Eva ler lidt mere "frigående" :-) Så kunne du bruge den som tilsigtet, men det er ikke anbefalelsesværdigt
Avatar billede hlt Juniormester
01. oktober 2007 - 00:47 #9
Nu får jeg en fejl om at "object reference is not set to an instance of an object"
Så forsøgte jeg at sætte en IsPostback ind, men det hjalp heller ikke. Tænkte at det var fordi at der jo ikke var sådan en label under emptytemplate, edittemplate og inserttemplate. Men det hjalp heller ikke. Nu har jeg så sat en labelimg ind under hver template, hvilket så heller ikke virker.
Avatar billede hlt Juniormester
01. oktober 2007 - 00:54 #10
Nu fandt jeg fejlen. Jeg havde fået slettet Image2. Og der skulle være en Image2 under hver template i formviewet. Så nu virker det.
Tusind tak for hjælpen. Smider du et svar, så du kan få point?
Avatar billede hlt Juniormester
01. oktober 2007 - 00:56 #11
Findes der ikke en måde at tilgå hvert id på en side? Lidt som dokument.getElementById("element")?
Avatar billede neoman Novice
01. oktober 2007 - 01:16 #12
Der findes millioner af måder at tilgå kontroller på en side - hvad går dit spørgsmål på specifikt ?  Og løste du opgaven ved at bruge eventhandleren ?
Avatar billede neoman Novice
01. oktober 2007 - 01:22 #13
Kontroller som sidder i andre kontroller kan som oftest (ikke altid) IKKE tilgås direkte men skal fiskes op. Een af måderne er at finde dem med en FindControl (der findes mange andre - man kan f.eks. løbe igennem samtlige controller i en container, og sammenligne dens type og navn med det man søger efter) I en event handler er der tit en kontrol som kan tilgås enten fra e (event arguments) eller som sender (den kontrol som forårsagede eventet) - det kommer helt an på hvad du vil.
Avatar billede hlt Juniormester
01. oktober 2007 - 09:51 #14
men jeg tænkte mere på f.eks hvis man laver en td med et id, og gerne vil tilgå dens innerHTML. Der kan man vel ikke bruge findControl vel?
Og ja, jeg fik løst problemet, så tak for hjælpen.
Avatar billede neoman Novice
01. oktober 2007 - 10:07 #15
Jeg er med på at du fik løst problemet, men spurgte (for vore efterkommere, og andre brugere af E) HVILKEN METODE du anvendte :)

innerHTML - snakker du nu client-side ? Eller code-behind ? Du kan fra code-behind tilgå alle kontroller som har runat=server (også HTML kontroller),og kontroller inde i disse kontroller. Så f.eks., hvis du bruger en  <asp:table..:

Dim myTable as Table
Dim workRow as TableRow
Dim workCell as TableCell

For each workRow in myTable.Rows
  workCell = workRow(cellIndex)
  Dim myLabel as Label ' f.eks., vhis det er en label du har i en tabelcelle 3
  myCell =workRow.Cells(cellIndex)
  myLabel =  CType(myCell.controls(controlIndex)) ' controlIndex=0 hvis din Label er den første  control i cellen
 
Next
Avatar billede neoman Novice
01. oktober 2007 - 10:08 #16
myLabel =  CType(myCell.Controls(controlIndex),Label)
Avatar billede hlt Juniormester
01. oktober 2007 - 11:25 #17
Nå ok. Jamen jeg brugte denne:
Dim counter As Integer = CType(FormView1.FindControl("Labelimg"), Label).Text
            Dim myImage As Image = CType(FormView1.FindControl("Image2"), Image)

       
            Select Case counter
                Case 0
                    myImage.ImageUrl = "~/images/tourstar0.gif"
                Case 1
                    myImage.ImageUrl = "~/images/tourstar1.gif"
                Case 2
                    myImage.ImageUrl = "~/images/tourstar2.gif"
                Case 3
                    myImage.ImageUrl = "~/images/tourstar3.gif"
                Case 4
                    myImage.ImageUrl = "~/images/tourstar4.gif"
                Case 5
                    myImage.ImageUrl = "~/images/tourstar5.gif"
                Case 6
                    myImage.ImageUrl = "~/images/tourstar6.gif"
                Case 7
                    myImage.ImageUrl = "~/images/tourstar7.gif"
                Case 8
                    myImage.ImageUrl = "~/images/tourstar8.gif"
                Case 9
                    myImage.ImageUrl = "~/images/tourstar9.gif"
                Case 10
                    myImage.ImageUrl = "~/images/tourstar10.gif"

            End Select
Og nu forstår jeg hvorfor jeg ikke kan få fat i den. Jeg har jo bare lavet en almindelige table og ikke en <asp:table>. jeg skal nok til at vænne mig til at asp.net kan meget mere serverside end almindelig asp.
Avatar billede neoman Novice
01. oktober 2007 - 12:00 #18
Kommer an på kontekst.Man kan også finde ting i en alm tabel . Den hedder HTMLTable i asp-speak, og har vist nok stadig fortidsuhyret "innerHtml" - pas på med at bruge innerHtml, for så kommer Ole Bole efter dig :)
Avatar billede hlt Juniormester
01. oktober 2007 - 12:27 #19
He he ok......Det er faktisk heller ikke så tit at jeg bruger den, men nogen gange kan den være behjælpelig i en snæver vending. Men jeg skal nok på passe på ;-)
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