Avatar billede mickeynt Nybegynder
21. december 2004 - 12:27 Der er 19 kommentarer og
1 løsning

Tilføje til ListBox

Hej,

Jeg har en ListBox hvori der er nogle Items i forvejen, og jeg skal så ved hjælp af en textbox kunne indtaste flere Items. Jeg har bare brug for at tjekke om det jeg indtaster ikke står i listboksen i forvejen.

Jeg har prøvet lidt med en for... each.. -lykke, men kan ikke rigtig få det til at virke. Det skal være noget lignende dette:

Sub BtnTilfoj_Click(sender As Object, e As EventArgs)

Dim boksen as new arraylist(LstBrugerInstr)
Dim Item as string

Item = LstBrugerInstr.Items

For each Item in boksen

If txtnytinstr.text = LstBrugerInstr.Items.text Then

response.write("Står der i forvejen!")
Else
LstBrugerInstr.Items.Insert(0,new ListItem(txtnytinstr.text))
txtNytInstr.text = ""
End If

Next
End Sub
Avatar billede snepnet Nybegynder
21. december 2004 - 14:24 #1
Hej mickeynt.

på en listbox's Items har du to relevante metoder i denne forbindelse :

someListBox.Items.FindByValue(...)
og
someListBox.Items.FindByText(...)

De skulle kunne give en hånd med den slags.

mvh
Avatar billede snepnet Nybegynder
21. december 2004 - 14:25 #2
(du kan også spørge på IndexOf, men det kræver at du har et ListItem at spørge med)
Avatar billede mickeynt Nybegynder
22. december 2004 - 12:02 #3
Hej igen.

Jeg har prøvet dine metoder i denne for.. each...-løkke. Men den skriver i begge tilfælde at "Value of type 'System.Web.UI.WebControls.ListItem' cannot be converted to 'Boolean'." - Også med FindByValue.


Sub BtnTilfoj_Click(sender As Object, e As EventArgs)

Dim i as integer

  For i = 0 to lstBrugerInstr.Items.count - 1
    If LstBrugerInstr.Items.FindByText("txtNytInstr.text") Then

        response.write("Det indtastede eksisterer i forvejen!")
    Else
        LstBrugerInstr.Items.Insert(0,new ListItem(txtnytinstr.text))
    End If
  next
  txtNytInstr.text = ""
End Sub
Avatar billede snepnet Nybegynder
22. december 2004 - 12:41 #4
ahh... FindByX returnerer null hvis det ikke findes... du kan lige se nedenstående eksempel.
(hvis det er problematisk at det er i C# må du lige sige til... så skal jeg nok oversætte det).

// bare så vi har lidt at proppe ind i listen
NameValueCollection col = new NameValueCollection();
col.Add("hej","1");
col.Add("med","2");
col.Add("dig","3");

// en ny dropdownliste her
DropDownList ddlist = new DropDownList();
// datakilden sættes
ddlist.DataSource = col;
// og der databindes
ddlist.DataBind();

// der spørges på en bestemt værdi, og hvis den ikke er der indsættes den.
if(ddlist.Items.FindByValue("4") == null)
    ddlist.Items.Add(new ListItem("du","4"));

mvh
Avatar billede snepnet Nybegynder
22. december 2004 - 12:42 #5
Denne her skulle så udvides lidt :

// der spørges på en bestemt værdi, og hvis den ikke er der indsættes den.
if(ddlist.Items.FindByValue("4") == null)
    ddlist.Items.Add(new ListItem("du","4"));
else
    Response.Write("Det indtastede eksisterer i forvejen!");

mvh
Avatar billede mickeynt Nybegynder
22. december 2004 - 13:07 #6
Hey, du' jo smart! :-) Det var det med 0-værdien der var galt... Jeg fik det til at virke omskrevet til VB herunder:

Sub BtnTilfoj_Click(sender As Object, e As EventArgs)

Dim i as integer

  For i = 0 to lstBrugerInstr.Items.count - 1
    If LstBrugerInstr.Items.FindbyValue(txtNytInstr.text) is Nothing Then

      LstBrugerInstr.Items.Insert(0,new ListItem(txtnytinstr.text))

    Else
      response.write("Det indtastede eksisterer i forvejen!")
    End If
  next
  txtNytInstr.text = ""
End Sub

- Der er så lige det lille problem at skriver jeg "DU" i stedet for "du", så indsætter den det alligevel. Hvordan klarer jeg det med UpperCase og LowerCase?
Avatar billede mickeynt Nybegynder
22. december 2004 - 13:18 #7
Hov, og så er der lige det, at hvis Listen er tom til at starte med, indsætter den intet fra textboxen.
Avatar billede snepnet Nybegynder
22. december 2004 - 16:17 #8
Måske noget i denne stile (jeg er ikke så skrap til VB) :

Sub BtnTilfoj_Click(sender As Object, e As EventArgs)
    If LstBrugerInstr.Items.Count < 1 or LstBrugerInstr.Items.FindbyValue(txtNytInstr.text.ToUpper()) is Nothing Then
      LstBrugerInstr.Items.Insert(0,new ListItem(txtnytinstr.text.ToUpper()))
    Else
      response.write("Det indtastede eksisterer i forvejen!")
    End If
  next
  txtNytInstr.text = ""
End Sub

Mvh
Snep
Avatar billede mickeynt Nybegynder
22. december 2004 - 21:27 #9
Tak for det sidste der, jeg tror jeg kan få det til at virke, men lige nu sidder jeg og bøvler med at der ikke bliver sat noget fra min text-box "TxtNytInstr" ind i Listboxen "LstBrugerInstr" - Det er som om den sætter 0-værdien ind i stedet for teksten ved denne linie:

LstBrugerInstr.Items.Insert(0,new ListItem(txtnytinstr.text))
Avatar billede snepnet Nybegynder
22. december 2004 - 21:56 #10
hov.... hvis tingende skal hænge sammen skal du nok bruge FindByText i det jeg skrev.
(går ud fra at det er det der står i teksboksen du vil have vist i listen :o)

er der noget sted i koden du skriver noget i tekstboksen ?
og
har du prøvet at debugge dig ned igennem koden ?

mvh
Avatar billede mickeynt Nybegynder
22. december 2004 - 22:28 #11
Hej, jeg har også forsøgt med FindByValue, men det er som om den ikke vil indsætte teksten - kun value'n. Det er vel noget med at "value" og "text" behandles forskelligt.

Jeg har lige lavet et eksempel her, med den kode der har været tættest på at virke:

<%@ Page Language="VB" Debug="True" %>
<script runat="server">

    Sub BtnTilfoj_Click(sender As Object, e As EventArgs)
   
    Dim i as integer
   
    For i = 0 to lstBrugerInstr.Items.count - 1
        If LstBrugerInstr.Items.FindbyText(txtNytInstr.text) is Nothing Then
   
          LstBrugerInstr.Items.Insert(0,new ListItem(txtnytinstr.text))
   
      Else
        LblfejlNytinstr.text = "Det indtastede findes allerede i din liste!"
        End If
      next
      txtNytInstr.text = ""
    End Sub

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <p>
            <asp:ListBox id="LstBrugerInstr" runat="server" Height="300px" Width="150px">
                <asp:ListItem Value="En ting">En ting</asp:ListItem>
                <asp:ListItem Value="En anden ting">En anden ting</asp:ListItem>
            </asp:ListBox>
        </p>
        <p>
            Skriv her det der skal tilføjes:<br />
            <asp:TextBox id="TxtNytInstr" runat="server"></asp:TextBox>
            <br />
            <br />
            <asp:Label id="LblFejlNytInstr" runat="server" forecolor="Red"></asp:Label>
        </p>
        <p>
            <asp:Button id="BtnTilfoj" runat="server" Text="Tilføj"></asp:Button>
        </p>     
    </form>
</body>
</html>
Avatar billede snepnet Nybegynder
22. december 2004 - 22:36 #12
Du har ikke angivet at du ønsker at bruge din metode til at håndtere click-eventet på din knap (onclick="BtnTilfoj_Click").
Og - løkken er stadig ikke nødvendig... prøv sådan her :

// din knap i aspx-en
<asp:Button id="BtnTilfoj" runat="server" Text="Tilføj" onclick="BtnTilfoj_Click"></asp:Button>

// og din metode :
Sub BtnTilfoj_Click(sender As Object, e As EventArgs)
    If LstBrugerInstr.Items.FindbyText(txtNytInstr.text) is Nothing Then
        LstBrugerInstr.Items.Insert(0,new ListItem(txtnytinstr.text))
        txtNytInstr.text = ""
    Else
        LblfejlNytinstr.text = "Det indtastede findes allerede i din liste!"
    End If
End Sub

mvh
Avatar billede mickeynt Nybegynder
22. december 2004 - 23:17 #13
Super, nu virker det endelig!

Jeg kan godt se at den løkke ikke var nødvendig, men til at starte med var det fordi jeg ville have løkken til at generere en streng med hvert Item sepereret af komma;
som jeg så kunne indsætte i en database med SQL.

Du må gerne lægge et svar, men hvis du har et hurtigt bud på hvordan man kan bruge løkken til at lave sådan en tekststreng må du gerne komme med det. Du får selvfølgelig ekstra point :-)
Avatar billede snepnet Nybegynder
23. december 2004 - 00:28 #14
hvad med sådan noget her ?
(man kan ikke lave en for each over en collection der modificeres undervejs... det giver dig en runtime fejl).

    Sub BtnTilfoj_Click(sender As Object, e As EventArgs)
        If LstBrugerInstr.Items.FindbyText(txtNytInstr.text) is Nothing Then
            LstBrugerInstr.Items.Insert(0,new ListItem(txtnytinstr.text))
            txtNytInstr.text = ""
        Else
            LblfejlNytinstr.text = "Det indtastede findes allerede i din liste!"
        End If

        Dim strItems as String = nothing
        for each li as ListItem in LstBrugerInstr.Items
            strItems = strItems & li.Text & ","
        next
        if not strItems is nothing
            'fjerne bare det sidste komma
            strItems = strItems.Remove(strItems.Length - 1, 1)
        end if
        Response.Write (strItems)
    End Sub

Håber det holder vand sådan nogenlunde :o)

Mvh
Snep
Avatar billede mickeynt Nybegynder
23. december 2004 - 01:05 #15
Ja, det er meget perfekt! "Li" skulle lige defineres i starten i stedet for "as listItem inde i for-sætningen for at det ville køre, men ellers fint sådan her:

Dim strItems as String = nothing
Dim li as ListItem

        for each li in LstBrugerInstr.Items
            strItems = strItems & li.Text & ", "
        next
        if not strItems is nothing
            'fjerner bare det sidste komma
            strItems = strItems.Remove(strItems.Length - 1, 1)
        end if
        Response.Write(strItems)
End Sub

Men den fjerner godt nok ikke det sidste komma, selvom den burde, men ellers holder det vand! :-)
Avatar billede snepnet Nybegynder
23. december 2004 - 01:10 #16
det lyder lidt underligt .... det virker helt fint her ... du kan lige få hele koden :

<%@ Page Language="VB" Debug="True" %>
<script runat="server">

    Sub BtnTilfoj_Click(sender As Object, e As EventArgs)
        If LstBrugerInstr.Items.FindbyText(txtNytInstr.text) is Nothing Then
            LstBrugerInstr.Items.Insert(0,new ListItem(txtnytinstr.text))
            txtNytInstr.text = ""
        Else
            LblfejlNytinstr.text = "Det indtastede findes allerede i din liste!"
        End If
   
        Dim strItems as String = nothing
        for each li as ListItem in LstBrugerInstr.Items
            strItems = strItems & li.Text & ","
        next
        if not strItems is nothing
            strItems = strItems.Remove(strItems.Length - 1, 1)
        end if
        Response.Write (strItems)
    End Sub

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <p>
            <asp:ListBox id="LstBrugerInstr" runat="server" Height="300px" Width="150px">
                <asp:ListItem Value="En ting">En ting</asp:ListItem>
                <asp:ListItem Value="En anden ting">En anden ting</asp:ListItem>
            </asp:ListBox>
        </p>
        <p>
            Skriv her det der skal tilføjes:<br />
            <asp:TextBox id="TxtNytInstr" runat="server"></asp:TextBox>
            <br />
            <br />
            <asp:Label id="LblFejlNytInstr" runat="server" forecolor="Red"></asp:Label>
        </p>
        <p>
            <asp:Button id="BtnTilfoj" onclick="BtnTilfoj_Click" runat="server" Text="Tilføj"></asp:Button>
        </p>
    </form>
</body>
</html>

bare prøv at paste den direkte ind... det ville være lidt underligt hvis det ikke fungerede hos dig synes jeg.

mvh
Avatar billede mickeynt Nybegynder
23. december 2004 - 01:26 #17
Ahh.. Det var så fordi jeg havde lavet dit kommaseperationsfelt om fra "," til ", " -
derfor krævede (strItems.Length - 1, 1) længere nede at blive lavet om til (strItems.Length - 2, 1) Så nu må det siges at virke perfekt! (- Selvfølgelig også kun en detalje med det komma!)

Men du skal have mange tak for den store hjælp denne gang! :-D
Avatar billede snepnet Nybegynder
23. december 2004 - 01:28 #18
det var i hvert fald så lidt - du skriver bare hvis der skulle være mere omkring det.
mvh - og held og lykke med det :o)
Avatar billede snepnet Nybegynder
23. december 2004 - 01:33 #19
er du vimmer ... det var en meget fornem pointgivning må man sige - så har jeg vist også fået så hatten passer :o)
mvh
Avatar billede mickeynt Nybegynder
27. december 2004 - 14:44 #20
Det var også meget hjælp! :-)
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