Avatar billede Kim Neesgaard Seniormester
19. november 2004 - 16:32 Der er 18 kommentarer og
1 løsning

Aflæse værdier dynamisk fra en DropDownList

Jeg har en DropDownList, der er fodret med nogle faste tekster og værdier under Collection. Er det muligt under kørsel af programmet at afæse disse værdier?
Avatar billede agertoft Nybegynder
19. november 2004 - 22:30 #1
Du kan få fat i værdien fra din DropDownList med metoden SelectedValue.

string indhold = myDropDownList.SelectedValue;

Er det noget i den stil du er ude efter, eller har jeg misforstået dig? :)
Avatar billede Kim Neesgaard Seniormester
20. november 2004 - 09:35 #2
Det jeg ville, var faktisk at aflæse ALLE mulige værdier i kontrollen.
Avatar billede agertoft Nybegynder
20. november 2004 - 13:39 #3
Ville det så ikke være smartere at aflæse værdierne fra din collection?
Avatar billede Kim Neesgaard Seniormester
20. november 2004 - 17:53 #4
Jo - hvordan gør man det?
Avatar billede agertoft Nybegynder
20. november 2004 - 21:06 #5
Hvilken form for collection er det? Er det et array, arraylist eller...?

Du kan løbe din collection igennem med en foreach-løkke:

foreach (string minVaerdi in minArrayListe)
{
  Console.WriteLine(minVaerdi);
}
Avatar billede snepnet Nybegynder
20. november 2004 - 23:24 #6
og hvis du vil kigge dine elementer i selve dropdownlisten igennem kan du gøre det sådan her :

foreach(ListeItem li in myDropDownList.Items)
{
  // string tekst = li.Text;
  // string value = li.Value;
}

mvh
Avatar billede Kim Neesgaard Seniormester
21. november 2004 - 13:42 #7
agertoft -> Så vidt jeg kan se, udskriver du værdierne til skærmen - jeg ville gerne gemme dem i variable eller en array, så jeg kan bruge dem i anden sammenhæng i programmet.

snepnet -> Når jeg kører din kode får jeg meldingen: Name 'foreach' is not declared. Hvordan skal den erklæres?
Avatar billede agertoft Nybegynder
21. november 2004 - 16:30 #8
Du kan også bruge en for-løkke:

string[] mitArray = new string[minArrayListe.Length);

for (int i = 0; i < minArrayListe.Length; i++)
{
  mitArray[i] = minArrayListe[i];
}

Men det kopierer jo i virkeligheden bare dit collection til en anden, og det er der ingen grund til. Hvorfor kan du ikke bruge din oprindelige collection? Der har du jo det hele samlet...
Avatar billede Kim Neesgaard Seniormester
21. november 2004 - 18:58 #9
Men jeg er stadig i tvivl om, hvordan jeg får dem ud! Hvis jeg eksempelvis manuelt har lagt følgende ind ved at bruge collectionegenskaben for DropDownList:

Danmark  23
Sverige  55
Norge    89

hvad skriver jeg så helt konkret af programkode, der hiver disse oplysninger ud og lægger dem i en array under kørsel af programmet?
Avatar billede agertoft Nybegynder
21. november 2004 - 19:45 #10
Hvis det SKAL være din DropDownList, du henter fra, vil du gøre sådan:

string[] lande = new string[100];
int i = 0;

foreach(ListeItem li in myDropDownList.Items)
{
  lande[i] = li.Text;
  i++;
  lande[i] = li.Value;
  i++;
}

Så får du først selve teksten fra din dropdown i arrayet, og det efterfølgende item i array'et vil så være værdien, som er tilknyttet dit teksten. Sådan kan man ihvertfald gøre det...

snepnet har sikkert en smartere måde? :)
Avatar billede Kim Neesgaard Seniormester
22. november 2004 - 10:07 #11
Er det bedre at gøre det den anden vej rundt: oprette en array i Page_Load med værdierne til DropDownListen og så indlæse dem i listen? På den måde er værdierne tilgængelige til andre formål. Hvis det er en bedre måde, hvordan får man så arrayet overført til DropDownList collection?
Avatar billede agertoft Nybegynder
22. november 2004 - 15:48 #12
Jeg tror vi snakker forbi hinanden. Jeg kan ikke se, hvorfor du først har en collection, som du bruger som datasource på en dropdownlist, hvorefter du opretter en ny collection med værdierne fra dropdownlisten, som du så kan aflæse fra. Det er jo dobbelt arbejde...

Hvis du prøver at smide din kode, kan jeg se, hvad der vil være det smarteste for dig..
Avatar billede Kim Neesgaard Seniormester
22. november 2004 - 16:26 #13
Det er mig, der ikke ved nok om ASP.NET/collections til at jeg kan formulere det ordentligt!!

Her er koden (det er bare en testside):

<html>
<head>
    <link href="master.css" type="text/css" rel="stylesheet" />
</head>
<body marginheight="0" marginwidth="0">
    <form runat="server">
        <p>
            <asp:Button id="Button1" onclick="Button1_Click_1" runat="server" Text="Button"></asp:Button>
            <asp:DropDownList id="DropDownList1" runat="server">
                <asp:ListItem Value="USAX">USA</asp:ListItem>
                <asp:ListItem Value="DanmarkX">Danmark</asp:ListItem>
                <asp:ListItem Value="SverigeX">Sverige</asp:ListItem>
            </asp:DropDownList>
        </p>
        <p>
            <asp:TextBox id="TextBox1" runat="server" Width="361px"></asp:TextBox>
        </p>
        <p>
            <asp:Button id="Button2" onclick="Button2_Click" runat="server" Text="Button"></asp:Button>
            <asp:TextBox id="TextBox2" runat="server"></asp:TextBox>
        </p>
        <!-- Insert content here -->
    </form>
</body>
</html>

Knappen samler brugerens valg i en tekstbox:

Sub Button1_Click_1(sender As Object, e As EventArgs)
textbox1.text=textbox1.text + dropdownlist1.SelectedItem.Value
End Sub

Det jeg så gerne vil er, at jeg fra koden kan aflæse samtlige mulige værdier i DropDownListen.
Avatar billede agertoft Nybegynder
23. november 2004 - 17:15 #14
Hvis du har fodret din dropdownlist med faste værdier, kunne du jo også bare oprette et array med de samme faste værdier.

Ellers kan du aflæse det sådan:

private string[] lande = new string[100];

for (int i = 0; i < DropDownList1.Items.Count; i++)
{
    lande[i] = DropDownList1.Items[i].Value;
}

Erlære arrayet i toppen og kør for-løkken i din btnClick. Så vil alle values fra din dropdownlist blive lagt i lande-arrayet.
Avatar billede Kim Neesgaard Seniormester
23. november 2004 - 19:43 #15
Jeg vil gerne kun skulle vedligeholde værdierne eet sted - derfor vil jeg gerne aflæse dem og det er lige nøjagtig det, du her har vist. Dog får jeg en fejl ved aflæsning af en enkeltværdi (VB):

Dim x as string
x = DropDownList1.Items[1].Value

Så giver den følgende besked: BC30311: Value of type 'System.Web.UI.WebControls.ListItemCollection' cannot be converted to 'String'?
Avatar billede agertoft Nybegynder
23. november 2004 - 22:55 #16
Value-metoden returnerer en string i forvejen, så jeg kan ikke se, hvorfor det der ikke skulle virke. Og value'en er jo "DanmarkX", og den skal kunne konverteres til en string...

Men hvorfor henter du en enkeltværdi og ikke i den løkke, som jeg viste? Du skulle jo bruge alle værdierne...?
Avatar billede Kim Neesgaard Seniormester
24. november 2004 - 17:31 #17
Jeg ville bare se om det virkede inden jeg hev dem alle ud! Det undrer mig også, at den ikke vil!
Avatar billede Kim Neesgaard Seniormester
24. november 2004 - 19:02 #18
Den skal hedde x = DropDownList1.Items(1).Value, altså med blød parentes! Jeg fandt ud af det ved at konvertere

lande[i] = DropDownList1.Items[i].Value;

med http://www.developerfusion.com/utilities/convertcsharptovb.aspx. Lægger du et svar?
Avatar billede agertoft Nybegynder
24. november 2004 - 21:10 #19
Hehe ok, jeg har ikke rigtig rodet med VB før.. ;)
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