0
Tags:
asp.net
Skrevet af
Bruger #7741
@ 11.07.2005
Vi slutter vores gennemgang af de simple kontroller med at kigge på forskellige typer af lister - herunder ListBox og DropDownList.
ListBox
En ListBox giver en bruger mulighed for at vælge et (det er standard) eller flere elementer på en liste.
Figur 1 En ListBox i aktion.Som opmærkning er den simple syntaks som følger:
<asp:ListBox id="Navn" RunAt="Server" SelectionMode="Single|Multiple">
<asp:ListItem Value="Værdi" Text="Tekst" Selected="True|False"/>
</asp:ListBox>
Speciel for kontrollen er egenskaben SelectionMode, som i opmærkningen kan indeholde værdien Single eller Multiple. Ved Single kan der kun vælges et element på listen.
De værdier som ønskes vist i listboksen, er objekter af typen ListItem som blandt andet indeholder egenskaberne Value og Text. Sidstnævnte er den streng som ønskes vist i listen, og Value er en eventuel nøgle. Tænk for eksempel på en liste med bynavne og postnumre. I hvert element er bynavnet placeret i Text, og postnummeret placeret i Value. På den måde er det som vi skal se, nemt at aflæse et postnummer ud fra brugerens valg af en by. Man behøver dog ikke angive en nøgle i Value. Er der ikke nogen værdi i Value, vil ASP.NET blot returnere Text-egenskaben.
En ListItem indeholder også Selected-egenskaben, som angiver om elementet er valgt.
Kode
Man kan naturligvis også programmeringsmæssigt tildele listboksen værdier. Det sker gennem kontrollens Items-samling, som blandt andet indeholder metoden Add. Metoden er overloaded (den kan kaldes med flere forskellige argumenter), og skal man blot indsætte elementer hvor Text- og Value-egenskaberne er ens, kan man derfor benytte metoden med en enkelt streng som argument:
// C#
ListBox1.Items.Add("Værløse");
ListBox1.Items.Add("Farum");
' VB
ListBox1.Items.Add("Værløse")
ListBox1.Items.Add("Farum")
Den lidt mere komplicerede, men mere brugbare, metode bruger i stedet for en streng et objekt af ListItem som argument:
// C#
ListItem Element = new ListItem("Værløse","3500");
Element.Selected = true;
ListBox1.Items.Add(Element);
ListBox1.Items.Add(new ListItem("Farum","3520"));
' VB
Dim Element As New ListItem("Værløse","3500")
Element.Selected = true
ListBox1.Items.Add(Element)
ListBox1.Items.Add(new ListItem("Farum","3520"))
Bemærk de to måder at indsætte objekter i listboksen på - enten oprettes objektet på forhånd, eller også i forbindelse med kaldet. Bemærk også egenskaben Selected. Den fortæller om elementet er valgt.
Hvis man bruger Web Matrix, kan elementer i en listboks nemt vedligeholdes - se figur 2. Bemærk igen de tre egenskaber fra ListItem-klassen - Text, Value og Selected.
Figur 2 Gennem WeB Matrix er det nemt at vedligeholde elementer i en ListBox.For at finde et element valgt af brugeren kan man eksempelvis benytte egenskaben SelectedItem fra selve kontrollen, som returnerer et ListItem-objekt.
EksempelLad os se på et eksempel som bruger såvel opmærkninger som kode til at oprette en ListBox:
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(Object sender, EventArgs e){
if (!Page.IsPostBack){
Byer.Items.Add(new ListItem("Værløse","3500"));
Byer.Items.Add(new ListItem("Helsingør","3000"));
Byer.Items[0].Selected = true;
}
}
void Button1_Click(object sender, EventArgs e) {
Label1.Text = "Postnummer: " + Byer.SelectedItem.Value;
}
</script>
<html><body>
<form runat="server">
<asp:ListBox id="Byer" runat="server">
<asp:ListItem Value="3200">Helsinge</asp:ListItem>
<asp:ListItem Value="3520">Farum</asp:ListItem>
</asp:ListBox>
<br/>
<asp:Button id="Button1" onclick="Button1_Click"
runat="server" Text="Vælg" />
<br/>
<asp:Label id="Label1" runat="server"/>
</form></body></html>
<%@ Page Language="VB" %>
<script runat="server">
Sub Page_Load(sender As Object, e As EventArgs)
if not Page.IsPostBack then
Byer.Items.Add(new ListItem("Værløse","3500"))
Byer.Items.Add(new ListItem("Helsingør","3000"))
Byer.Items(0).Selected = true
end if
End sub
Sub Button1_Click(sender As Object, e As EventArgs)
Label1.Text = "Postnummer: " & Byer.SelectedItem.Value
End Sub
</script>
<html><body>
<form runat="server">
<asp:ListBox id="Byer" runat="server">
<asp:ListItem Value="3200">Helsinge</asp:ListItem>
<asp:ListItem Value="3520">Farum</asp:ListItem>
</asp:ListBox>
<br/>
<asp:Button id="Button1" onclick="Button1_Click"
runat="server" Text="Vælg" />
<br/>
<asp:Label id="Label1" runat="server"/>
</form></body></html>
Siden består af en liste, en knap og en etiket - se figur 1. Elementerne i listen oprettes dels i opmærkningerne og dels i koden. I koden angives ligeledes, at det første element skal være markeret.
Når der klikkes på knappen, findes det element brugeren har valgt, og postnummeret vises. Det sker ved hjælp af førnævnte SelectedItem-egenskab.
Find elementer
Kontrollens Items-egenskab (samling af ListItem-objekter) indeholder to metoder som kan være meget brugbare - nemlig metoderne FindByText og FindByValue. De kan bruges til at finde et element i en liste ud fra tekst eller nøgle.
Hvis man eksempelvis ønskede at finde og vælge elementet med postnummeret 3000 i det forrige eksempel, kan FindByValue bruges som følger:
// C#
Byer.SelectedItem.Selected = false;
Byer.Items.FindByValue("3000").Selected = true;
' VB
Byer.SelectedItem.Selected = false
Byer.Items.FindByValue("3000").Selected = true
Først sørger koden for at der ikke er nogen elementer markeret, og derefter findes Helsingør som markeres. Man kunne også have søgt efter Helsingør med metoden FindByText.
Flere valgte elementer
Indtil videre har vi koncentreret os om en liste hvor der kun kan vælges et element af brugeren. Ved at tildele egenskaben SelectionMode værdien ListSelectionMode.Multiple (via kode) eller blot Multiple (via opmærkning) kan flere elementer vælges af brugeren. Det kan eksempelvis ske ved at holde kontrol-knappen nede medens der klikkes på elementer.
Det gør det lidt mere kompliceret at aflæse hvilke elementer der er valgt af brugeren, men man kan eventuelt løbe alle elementer igennem og kontrollere Selected-egenskaben. I eksemplet fra tidligere kan listboksen ændres til at kunne håndtere flere markeringer som følger:
<asp:ListBox id="Byer" runat="server" selectionmode="Multiple">
For at finde ud af hvilke elementer brugeren har valgt (hvis der overhovedet er valgt nogen) kan følgende kode eksempelvis benyttes:
// C#
foreach(ListItem Element in Byer.Items)
if(Element.Selected)
// Kode til at håndtere valgte elementer
' VB
For Each Element As ListItem in Byer.Items
if Element.Selected Then
' Kode til at håndtere valgte elementer
End if
Next
DropDownList
En DropDownList er ligeledes en liste med elementer som brugeren kan vælge imellem, men i modsætning til en ListBox er listen "klappet sammen" til en enkelt linje således, at brugeren først skal klikke på en lille pil og herefter vælge et element på en liste. Se figur 3.
Figur 3 Brug af en DropDownList.DropDownList minder meget om ListBox i brug - dog med den store forskel at der ikke kan vælges flere elementer, og at der altid vil være valgt et element. Den er meget benyttet fordi den ikke fylder så meget, og fordi brugeren altid tvinges til at foretage et valg.
Som opmærkning er den simple syntaks som følger:
<asp:DropDownList id="Navn" RunAt="Server">
<asp:ListItem Value="Værdi" Text="Tekst" Selected="True|False"/>
</asp:DropDownList>
Bortset fra at der ikke kan vælges mere end et element på listen, er der ikke den store forskel i den kodemæssige håndtering sammenlignet med en ListBox. Der henvises derfor til gennemgangen af denne kontrol.
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (0)
Du skal være
logget ind for at skrive en kommentar.