Avatar billede lauge Nybegynder
01. februar 2004 - 13:18 Der er 12 kommentarer og
1 løsning

Multi Label

Hejsa,

Jeg har brug for at sætte "den samme tekst" ind i en repeater gennem en eller flere "Label's".

Og det er jo nemt nok hvis jeg kun har en Label:

CODEBEHIND:
CType(e.Item.FindControl("MinLabel", Label).Text = "en eller anden tekst"

ASCX:
<asp:Label id="MinLabel1" runat="server"></asp:Label>


Men hvad nu hvis jeg har flere labels??

Jeg kunne lave en "For Next" løkke på denne måde:

CODEBEHIND:
For i = 1 To 5
    CType(e.Item.FindControl("MinLabel" & i.ToString()), Label).Text = "en eller anden tekst"
Next

ASCX:
<asp:Label id="MinLabel1" runat="server"></asp:Label>
<asp:Label id="MinLabel2" runat="server"></asp:Label>
<asp:Label id="MinLabel3" runat="server"></asp:Label>
<asp:Label id="MinLabel4" runat="server"></asp:Label>
<asp:Label id="MinLabel5" runat="server"></asp:Label>


På den måde få smidt den samme ekst ind i 5 labels. Men det er jo ikke særlig hurtigt, hvis der de fleste steder kun er 1 eller 2 Label's, og måske i én repeater er helt op til 10 Label's.

Hvordan gør jeg dette bedre?

LAUGE
Avatar billede roger Nybegynder
01. februar 2004 - 13:27 #1
Kan du ikke databinde dine labels til den samme variabel ?
Avatar billede lauge Nybegynder
01. februar 2004 - 13:36 #2
jo det kan jeg sagtens, men mit problem er, at jeg ikke ved hvormange Label's der er.
Teroretisk kan der være fra 0 Label's i repeateren til uendeligt.

Så jeg vil bare have lov til at smide lige så mange af MinLabel ind i repeateren, men pga. deskal have uniukke ID, så vil jeg smide et tal ind efter "MinLabel".
<asp:Label id="MinLabel1" runat="server"></asp:Label>
<asp:Label id="MinLabel2" runat="server"></asp:Label>
<asp:Label id="MinLabel3" runat="server"></asp:Label>
<asp:Label id="MinLabel4" runat="server"></asp:Label>
<asp:Label id="MinLabel5" runat="server"></asp:Label>
Avatar billede roger Nybegynder
01. februar 2004 - 13:49 #3
hvordan smider du de labels på siden ?
Avatar billede lauge Nybegynder
01. februar 2004 - 14:00 #4
Det behøver ikke være en Label, men alle former for controller.

Ganske alm.

<asp:Repeater id="Repeater1" runat="server" OnItemDataBound="SecureOutput">
<itemtemplate>
<!-- div html tags -->
<asp:Label id="MinLabel1" runat="server"></asp:Label>
<!-- div html tags -->
<asp:Label id="MinLabel2" runat="server"></asp:Label>
<!-- div html tags -->
<asp:Label id="MinLabel3" runat="server"></asp:Label>
<!-- div html tags -->
<asp:Label id="MinLabel4" runat="server"></asp:Label>
<!-- div html tags -->
<asp:Label id="MinLabel5" runat="server"></asp:Label>
<!-- div html tags -->
</itemtemplate>
</asp:Repeater>

Så bruges OnItemDataBound="SecureOutput" til at fange dem...
Avatar billede roger Nybegynder
01. februar 2004 - 14:12 #5
Du har så en datasource du binder til repeateren.....kunne du ikke have din tekst-værdi liggende deri og så gøre således:

<asp:Label id="MinLabelX" runat="server" Text="<%#(noget cast eller eval)(Container.DataItem)%>"></asp:Label>

?
Avatar billede lauge Nybegynder
01. februar 2004 - 14:22 #6
jo det kunne jeg godt, men det ikke det jeg ønsker.
Der sker en masse "streng behandling" i CODEBEHIND, og der skal jeg igennem.
Avatar billede roger Nybegynder
01. februar 2004 - 14:23 #7
kunne du så ikke behandle på variablen du binder til ?
Avatar billede lauge Nybegynder
01. februar 2004 - 14:32 #8
jo det kunne jg også godt, men teksten skal skal ud er forskellig for hver row.
Samt jeg vil have så lidt kode som muligt i min repeater, således at den som sidder og sætter det op, har så lille mulighed som muligt for at lave fejl.
Derfor ønsker jeg blot at skrive :
<asp:Label id="MinLabelX" runat="server"></asp:Label>

Jeg ved godt jeg er besværlig :-)
Avatar billede roger Nybegynder
01. februar 2004 - 14:44 #9
I stedet for at du for hver row sweeper hele row igennem for labels og sætter text, kunne du jo ligeså godt bare ændre variablen du binder til, og undgå at sweepe igennem.

Men svaret på dit spørgsmål er, ja det kan gøres bedre.

Men hvis du ønsker at der KUN skal stå <asp:Label id="MinLabelX" runat="server"></asp:Label> i aspx filen

Så er svaret nej, Du er nød til at sweepe hver row igennem og sætte text for hver label.

Du kune evt. bruge en foreach(Label lbl in dinCollectionHvorLabels befinder sig)
Avatar billede lauge Nybegynder
01. februar 2004 - 22:45 #10
hmmm, jeg kan jo ikke bruge foreach() fordi de ikke kan have samme ID, og der kan være flere forskellige Labels som fx:
<asp:Label id="MinLabel1" runat="server"></asp:Label>
<asp:Label id="DinLabel1" runat="server"></asp:Label>
<asp:Label id="EndnuEnLabel3" runat="server"></asp:Label>

hvor de så alle 3 indeholder forskellige tekststrenge og der er flere end en af hver.
Avatar billede roger Nybegynder
02. februar 2004 - 00:00 #11
foreach har ikke noget med id at gøre, men snarere typen.
Avatar billede lauge Nybegynder
02. februar 2004 - 00:45 #12
yes netop - måske gav jeg en dårlig forklaring :-)
Jeg vil kunne lave fx:

<asp:Label id="MinLabel1" runat="server"></asp:Label>
<asp:Label id="MinLabel2" runat="server"></asp:Label>

<asp:Label id="DinLabel1" runat="server"></asp:Label>
<asp:Label id="DinLabel2" runat="server"></asp:Label>

<asp:Label id="EndnuEnLabel1" runat="server"></asp:Label>
<asp:Label id="EndnuEnLabel2" runat="server"></asp:Label>

og så få udskrevet 3 forskellige strenge 2 gange. Blot et teroretisk eksempel.
Avatar billede lauge Nybegynder
04. februar 2004 - 13:47 #13
jeg fik det ikke helt som jeg ville, men du får points alligevel for din tålmodighed!
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