28. september 2007 - 12:33Der 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å.
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.
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.
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>
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
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
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.
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?
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.
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.
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
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.
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 :)
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å ;-)
Synes godt om
Ny brugerNybegynder
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.