2012-05-03 24 views
11

Nel mio progetto ASP.NET. Ho due elenchi a discesa e una casella di controllo. Quando la casella è selezionata, il valore selezionato di DropDownList1 deve essere uguale al valore selezionato di DropDownList2. Ma il DropDownList1.SelectedValue non funziona.Elenco a discesa il valore selezionato non funziona

Ecco mio codice:

protected void chkSameBAddress_CheckedChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     if (this.chkSameBAddress.Checked == true) 
     { 

      this.txtcSAddress1.Text= this.txtcBAddress1.Text; 
      this.txtcSAddress2.Text = this.txtcBAddress2.Text; 
      this.txtcSAddress3.Text = this.txtcBAddress3.Text; 
      this.txtcSAddress4.Text = this.txtcBAddress4.Text; 
      this.txtcSCity.Text = this.txtcBCity.Text; 
      this.txtcSPostCode.Text = this.txtcBPostCode.Text; 
      this.txtcSState.Text = this.txtcBState.Text; 

      this.ddlcSCountry.Items.FindByValue(ddlcBCountry.SelectedItem.Value).Selected = true; 


     } 

    } 
    catch (Exception ex) 
    { 
     logger.Error(ex.Message); 
     throw; 

    } 
} 

Come visto nell'esempio precedente, se chkSmaeBAddress è selezionata, il valore selezionato di ddlcSCountry deve essere uguale ddlcBCountry valore selezionato.

+0

ddlcSCountry.SelectedIndex = ddlcSCountry.Items.IndexOf (ddlcSCountry.Items.FindByValue (ddlcBCountry.SelectedItem.Value)) – Nalaka526

+0

Puoi espandere ** ** Non funziona (evidente dal momento hai postato), si ottiene qualche errore? il menu a discesa è stato attivato? – V4Vendetta

+0

Non ho alcun errore. il dropdownlist non riceve risposta – user998405

risposta

18

Dove si collegano i dati a questi controlli dell'elenco a discesa? Dovrebbero essere vincolati solo nel caricamento iniziale della pagina come segue. Ho il sospetto che tu li leghi in ogni caricamento di pagina e quindi i valori selezionati scompaiono.

protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!Page.IsPostBack) 
    { 
     //Please check if you are binding checkbox controls here. 
     //If not bring them in here 
    } 
} 

Altro condizione è che sia ddlcSCountry e ddlcBCountry hould hanno stessi valori per poter selezionare. Altrimenti ddlcSCountry.Items.FindByValue(ddlcBCountry.SelectedItem.Value) sarà null e genererà un errore quando si tenta di impostare la proprietà Selected

Se entrambe le condizioni sopra sono ok, il codice dovrebbe funzionare.

EDIT Spiacente, il mio codice commentato dovrebbe essere quello di controllare l'associazione dei controlli dell'elenco a discesa e non la casella di controllo. quindi dovrebbe essere come

//Please check if you are binding both dropdown list controls here. 
//If not bind them within the if (!Page.IsPostBack) 

mettere un punto di interruzione nella vostra linea if (this.chkSameBAddress.Checked == true) all'interno CheckedChanged event e vediamo è in esecuzione e quindi i valori di runtime ...

+0

Ciao. leggo il menu a discesa utilizzando l'origine dati dell'entità – user998405

+0

È possibile inserire un punto di interruzione come detto sopra e controllare i valori di runtime. Non c'è niente di sbagliato nel tuo codice, ma sospetto che il problema sia l'ordine in cui l'hai fatto. Il tuo evento 'chkSameBAddress_CheckedChanged' è stato attivato? – Kaf

+0

ya. provo a inserire un punto di interruzione all'interno di chkSameBAddress_CheckedChanged. L'evento CheckedChanged è licenziato – user998405

0

Prova questo per selezionare

ddlcSCountry.Text=ddlcBCountry.SelectedItem.Value; 

Sarà selezionato elemento necessario

+0

ciao non ci sono ddlcSCountry.text. È ddlcSCountry.SelectedItem.text? – user998405

+0

dalla lettera superiore "Testo" – Likurg

+0

@ user998405 apportare Modifica – Likurg

0

Assicurarsi che chkSameBAddress.AutoPostBack è impostata su true. Se è impostato e continua a non funzionare, è consigliabile utilizzare un controllo UpdatePanel o spostare quella logica sul client utilizzando JavaScript.

+0

ya. Ho impostato su vero già – user998405

2

Sicuramente stai cercando di rendere uguali le caselle a discesa?

uso

ddlcSCountry.SelectedIndex = ddlcSCountry.FindStringExact(ddlcBCountry.Text); 

questo modo selezionare l'opzione corrispondente nell'elenco e non solo impostare il testo nel campo, che è molto utile quando si hanno valori di fondo con le opzioni di testo.

0

Assicurarsi di avere AutoPostBack impostata su true nelle proprietà di la DropDownList.

2

La soluzione accettata è una soluzione ovvia alla causa più comune, tuttavia, c'è un altro problema sorprendente che può causare questo!

I miei valori di elenco provengono da un database e i valori avevano avanzamento riga e ritorno a capo dai valori del database: \r\n. Questi valori sembrano uno spazio innocente, ma in realtà non lo sono!

La mia soluzione era rimuovere questi valori Char nascosti. Spero che sia d'aiuto.

Problemi correlati