2009-02-06 18 views

risposta

62

Penso che ciò che si vuole fare è questo:

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true"> 
    <asp:ListItem Text="--Select One--" Value="" /> 
</asp:DropDownList> 

assicurarsi che il 'AppendDataBoundItems' è impostato su vero altrimenti si sarà chiaro il '- Seleziona Uno-- 'elemento di elenco quando esegui il bind dei tuoi dati.

Se avete la proprietà 'AutoPostBack' di discesa impostata su true si dovrà impostare anche la proprietà 'CausesValidation' per vero quindi utilizzare un 'RequiredFieldValidator' per assicurarsi che il '- L'opzione Seleziona uno-- 'non causa un postback.

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1"></asp:RequiredFieldValidator> 
+0

Grazie, questo è esattamente quello che stavo cercando. :-) +1 –

+0

Questo molto utile. – Denis

+0

Semplice, veloce e facile. Buona risposta. –

0

Aggiungere un elemento e impostare la proprietà "Selected" su true, probabilmente si desidera impostare la proprietà "appenddatabounditems" su true anche in modo che il valore iniziale non venga eliminato quando il databound.

Se si sta impostando un valore iniziale che si trova negli elementi del database, quindi agganciare al tuo evento ondatabound e imposta quale indice si desidera selezionare = true, si desidera inserirlo in "if not page.isPostBack then". ..." anche se

Protected Sub DepartmentDropDownList_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles DepartmentDropDownList.DataBound 
    If Not Page.IsPostBack Then 
     DepartmentDropDownList.SelectedValue = "somevalue" 
    End If 
End Sub 
2

Quello che faccio è impostare la proprietà di testo dell'elenco a discesa DOPO I database. Qualcosa di simile a questo:

protected void LoadPersonComboBox() 
    { 
     var p = new PeopleBLL(); 

     rcmbboxEditPerson.DataSource = p.GetPeople(); 
     rcmbboxEditPerson.DataBind(); 
     rcmbboxEditPerson.Text = "Please select an existing person to edit..."; 
    } 

Questo rende visibile il valore iniziale di questo menu a discesa presentarsi, ma in realtà non essere una parte della discesa, né è un selezionabile.

2

So che questo ha già una risposta scelta - ma volevo buttarmi nei miei due centesimi. Ho una lista databound discesa:

<asp:DropDownList 
    id="country" 
    runat="server" 
    CssClass="selectOne" 
    DataSourceID="country_code" 
    DataTextField="Name" 
    DataValueField="CountryCode_PK" 
></asp:DropDownList> 
<asp:SqlDataSource 
    id="country_code" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
    SelectCommand="SELECT CountryCode_PK, CountryCode_PK + ' - ' + Name AS N'Name' FROM TBL_Country ORDER BY CountryCode_PK" 
></asp:SqlDataSource> 

Nel codebehind, ho questo - (che seleziona Stati Uniti per impostazione predefinita):

if (this.IsPostBack) 
{ 
    //handle posted data 
} 
else 
{ 
    country.SelectedValue = "US"; 
} 

la pagina inizialmente i carichi che in base al valore del 'Stati Uniti' piuttosto che cercare di preoccuparsi di unIndice selezionato (cosa succede se un altro elemento viene aggiunto nella tabella dati - Non voglio dover ricodificare)

11

So che questo è vecchio, ma una combinazione di queste idee porta a una soluzione molto elegante:

Mantieni tutte le impostazioni di proprietà predefinite per DropDownList (AppendDataBoundItems = false, Items empty). Poi gestire l'evento DataBound in questo modo:

protected void dropdown_DataBound(object sender, EventArgs e) 
{ 
    DropDownList list = sender as DropDownList; 
    if (list != null) 
     list.Items.Insert(0, "--Select One--"); 
} 

La ciliegina sulla torta è che questo gestore può essere condiviso da qualsiasi numero di oggetti DropDownList, o anche messo in una libreria di utilità generale per tutti i vostri progetti.

+0

Dove chiamare questo metodo? –

+1

@iQue è possibile impostare questo come evento "OnDataBound' per DropDownList. Penso che questo sia molto meglio della risposta accettata, poiché non c'è alcun problema quando la DataSource cambia e noi ri-DataBind; con la risposta accettata, re-DataBinding aggiungerà semplicemente elementi all'elenco esistente (che potrebbe essere ciò che vuoi, ma sembra più probabile che non sia quello che vuoi). –

1

per selezionare un valore dall'elenco a discesa utilizzare l'indice in questo modo:

se abbiamo la

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true"></asp:DropDownList> 

si usa:

DropDownList1.Items[DropDownList1.SelectedIndex].Value 

questo restituirebbe il valore per il indice selezionato

-1
dropdownlist.Items.Insert(0, new Listitem("--Select One--", "0"); 
0

amico Ciao, in questo caso è possibile utilizzare la

AppendDataBound="true" 

e dopo questo utilizzare la voce di elenco. per es .:

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true"> 
    <asp:ListItem Text="--Select One--" Value="" /> 
</asp:DropDownList> 

ma il problema in questo è dopo i dati selezionati secondo tempo sono aggiungono con vecchi dati.

Problemi correlati