Avatar billede kak Nybegynder
02. februar 2006 - 13:48 Der er 17 kommentarer og
2 løsninger

Indsætte værdi i dropdownlist

Jeg har oprettet en dropdownlist på følgende måde:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" DataSourceID="SqlDataSource1" DataTextField="Name" DataValueField="ID">
</asp:DropDownList>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
        SelectCommand="SELECT * FROM [myTable]"></asp:SqlDataSource>

Det virker også fint, men jeg vil gerne indsætte en post, øverst i min dropdown. Jeg har lavet denne sætning til det:

DropDownList1.Items.Insert(0, "<-Vælg kunde->")

Men jeg kan ikke få den til at gøre det, når siden loades. Kun ved en hændelse der sker senere, f.eks. når jeg opdaterer siden eller klikker på en knap. Kan jeg ikke sætte en eller anden sætning ind, så den ønskede post bliver sat ind, EFTER alle de andre poster er sat ind?
Avatar billede mikkel_sommer Nybegynder
02. februar 2006 - 15:20 #1
Hvis insert'en ligger i en funktion kan du vel kalde den funktion fra Page_Load.
Alternativt kunne du måske også vente til Page_Load med at give dropdwonlisten en datasource.

Men husk at passe på at "Vælg kunde" ikke pludselig bliver til en kunde.
Avatar billede mikkel_sommer Nybegynder
02. februar 2006 - 15:21 #2
Kunne du ikke komme helt udenom problemet ved at lade "Vælg kunde" stå ved siden af eller oven over dropdownlisten på en label?
Avatar billede snepnet Nybegynder
02. februar 2006 - 15:33 #3
du kan gøre det når du databinder kontrollen:

<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="ObjectDataSource1" OnDataBinding="DropDownList1_DataBinding" OnDataBound="DropDownList1_DataBound">
</asp:DropDownList>

og en handler i koden:
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
    DropDownList1.Items.Insert(0, "vælg her");
}

mvh
Avatar billede kak Nybegynder
03. februar 2006 - 13:19 #4
Jeg har prøvet forskellige ting fra page_load, men det virker ikke. Jeg kan også godt bare lave en label, men så vil den førte post jo automatisk være valgt, når man loader siden første gang, og det vil jeg helst undgå.

Jeg har forsøgt med det du foreslår snepnet. Men jeg får en fejl ved brug at OnDataBound. Fejlen er...
System.FormatException: Input string was not in a correct format.

Den funktion jer kalder virker fint (har testet den ved at lave en knap der kalder funktionen onclick)
Avatar billede dr_chaos Nybegynder
03. februar 2006 - 17:10 #5
prøv lige at vise din kode
Avatar billede kak Nybegynder
05. februar 2006 - 19:48 #6
Hvad er det du gerne vil se koden til? Der er ikke så meget relevant, foruden det jeg har vist i spørgsmålet.
Avatar billede snepnet Nybegynder
05. februar 2006 - 19:53 #7
formentlig den kode du bruger når du får fejl på det jeg skrev.... der er ikke noget i den kode der burde fejle sådan lige umiddelbart.
mvh
Avatar billede snepnet Nybegynder
05. februar 2006 - 19:54 #8
du kan også få et komplet eksempel herfra indbefattende ovenfor stående kode... det burde ikke skabe nogle problemer.
mvh
Avatar billede kak Nybegynder
05. februar 2006 - 20:03 #9
Jeg tilføjer blot OnDataBound="minSub" som vist i eksemplet længere oppe.
Avatar billede snepnet Nybegynder
05. februar 2006 - 20:17 #10
og hvordan ser din minSub ud? (inklusiv signatur)
mvh
Avatar billede kak Nybegynder
06. februar 2006 - 10:05 #11
Her er min sub.... Jeg er ret ny mht asp.net, så jeg er ikke klar over, hvad du mener med signatur?

Selve suben virker fint, hvis jeg laver en ny knap, og kalder suben via den.


Sub minSub(ByVal sender As Object, ByVal e As System.EventArgs)
Dim x
x = DropDownList1.Items.FindByText("<-Vælg kunde->")
If Len(Convert.ToString(x)) = 0 Then
  DropDownList1.Items.Insert(0, "<-Vælg kunde->")
End If
End Sub
Avatar billede snepnet Nybegynder
07. februar 2006 - 09:10 #12
mm.... kan du ikke prøve at gøre det som jeg har skrevet - altså i forbindelse med databinding. og så hav kun den linie kode der indsætter det øverste punkt.
mvh
Avatar billede kak Nybegynder
07. februar 2006 - 12:59 #13
Det hjalp desværre ikke. Hvis jeg laver OnDataBound="minSub", får jeg samme fejl som tidligere (System.FormatException: Input string was not in a correct format.
) selvom jeg kun har linien til at indsætte det øverste punkt.

Hvis jeg ændrer minSub til f.eks. blot at vise en msgbox, virker det fint.

Jeg har ikke sat en OnDataBinding ind, men det er vel heller ikke nødvendigt? (hvis jeg sætter minSub ind i OnDataBinding, sker der ikke noget)
Avatar billede snepnet Nybegynder
07. februar 2006 - 17:04 #14
her er et komplet eksempel du kan prøve.... kan du ikke se hvordan det du har divergerer fra det jeg har sendt :

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string[] data = { "hej", "med", "dig" };
            someDropDownList.DataSource = data;
            someDropDownList.DataBind();
        }
    }

    protected void someDropDownList_DataBound(object sender, EventArgs e)
    {
        someDropDownList.Items.Insert(0, "<vælg her>");
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="someDropDownList" runat="server" OnDataBound="someDropDownList_DataBound">
        </asp:DropDownList>   
    </div>
    </form>
</body>
</html>

har du f.eks. din dropdown i en liste kontrol af en art (datagrid/gridview/repeater/datalist).... eller har du et andet id på den end det du bruger i koden... den slags forskelle).

mvh
Avatar billede dr_chaos Nybegynder
08. februar 2006 - 09:30 #15
du kan bruge:
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" DataSourceID="SqlDataSource1" DataTextField="Name" DataValueField="ID" AppendDataBoundItems="true">
<asp:ListItem><-Vælg kunde-></asp:ListItem>
</asp:DropDownList>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
        SelectCommand="SELECT * FROM [myTable]"></asp:SqlDataSource>
Avatar billede dr_chaos Nybegynder
08. februar 2006 - 09:31 #16
ved at sætte AppendDataBoundItems="true" tilføjes de data der kommer fra databasen efter  allerede eksisterende items.
Avatar billede kak Nybegynder
08. februar 2006 - 10:55 #17
dr_chaos, din løsning er faktisk rigtig god, men den gav samme fejl i første omgang. Jeg fandt så ud af, at hvis jeg ændrede "<-Vælg kunde->" til "0", så virkede det. Løsningen er, at man både skal tildele en text og en value.

Jeg har nu fundet frem til, at denne her virker, hvis man bruger løsningen som dr_chaos foreslår:
<asp:ListItem text="<-Vælg kunde->" Value="0"></asp:ListItem>

Og vil man bruge en sub, skal den se således ud:
DropDownList1.Items.Insert(1, "<-Vælg kunde->")
Man må åbenbart ikke bruge 0 som index i dropdownlisten.

snepnet og dr_chaos, I har begge været en stor hjælp. Vil I smide et svar, så deler jeg pointene.
Avatar billede dr_chaos Nybegynder
08. februar 2006 - 10:57 #18
svar :)
Avatar billede snepnet Nybegynder
08. februar 2006 - 14:49 #19
og der kommer også et her :o)
mvh
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