2009-08-31 18 views
5

Ciao qui voglio associare alcuni valori alla casella di controllo in modo dinamico.combobox valore predefinito winforms C#

dataset ds = //getting emp values form database; 
cbemp.ValueMember = "empid"; 
cbemp.DisplayMember = "empname"; 
cbemp.DataSource = ds.Tables["emp"]; 

funziona correttamente. Ma voglio aggiungere

"Seleziona emplyoee" come valore predefinito della casella di controllo.

Ma la mia casella di controllo aggiungendo direttamente i valori come

a1
a2
a3

come questo.

Ho provato come questo

cbemp.Items.Insert(0, "Select emplyoee"); 

ma non funziona

come posso aggiungerlo?

risposta

8

Quando si utilizza l'associazione dati, non è possibile aggiungere o rimuovere manualmente gli articoli. L'unico modo per ottenere ciò che si desidera utilizzando l'associazione dati è inserire prima una riga nello DataTable con il valore desiderato, o popolare la casella combinata per codice (aggiungere l'elemento "Seleziona dipendente" e quindi scorrere le righe DataTable per aggiungere il record).

Forse qualcosa di simile potrebbe funzionare:

// create new row for "Select employee" 
DataRow row = ds.Tables["emp"].NewRow(); 
row["empid"] = -1; 
row["empname"] = "Select employee"; 
// insert the row at the top of the table 
ds.Tables["emp"].Rows.InsertAt(row, 0); 
// do the databinding 
cbemp.ValueMember = "empid"; 
cbemp.DisplayMember = "empname"; 
cbemp.DataSource = ds.Tables["emp"]; 

Non faccio uso di associazione dati molto, così ci possono essere svantaggi con questo che io sono a conoscenza di (ma sono fiducioso che la comunità farlo notare in quel caso).

+0

grazie risolto – Nagu

0

Penso che dovresti aggiungerlo al datatable sottostante (ds.Tables ["emp"]) affinché appaia come una voce nell'elenco quando stai usando i controlli dei dati.

0

Quando il controllo è vincolato ai dati, non è possibile aggiungere elementi manualmente.

Per risolvere questo problema, è possibile aggiungere un nuovo elemento all'origine dati oppure aggiungere manualmente gli elementi.

4

L'inserimento di dati nell'origine dati è una cattiva idea. Promuove la rottura delle astrazioni dei tuoi livelli e può portare ad alcuni problemi se stai utilizzando la stessa fonte di dati altrove.

Invece, puoi facilmente estendere il ComboBox per mostrare un messaggio "Seleziona" quando non è selezionato alcun articolo.

ho bloggato su questo problema e ha fornito il codice qui: http://www.byteauthor.com/2010/08/inner-label-in-combobox/

0

La soluzione di cui sopra accettata è meglio, ma un trucco che potrebbe tornare utile a volte è quello di Unione un record di "falso" al SQL che sta tornando il recordset per l'associazione dei dati. In questo caso, qualcosa di simile a:

select 0 as empid, 'Please select' as empname 
union 
select empid, empname from emp 
order by empid 

Naturalmente si dovrà proteggere il database di scrivere accidentalmente il record "0" indietro (ad esempio, se l'utente non effettua una selezione), ma che non è troppo difficile.

0

se ComboBoxStyle è impostato su DropDownList (quindi l'utente non può modificare la casella combinata) quindi il modo più semplice per assicurarsi che l'utente selezioni un elemento è impostare selectedIndex = -1, è sempre possibile aggiungere "Selezionare" ecc. SOPRA la casella combinata.

0

Nel mio caso (casella combinata concatenata) ho risolto il problema in questo modo. Naturalmente il modo migliore è quello di Kevin Coulombe.

ComboBox.SelectedIndex = -1; 
ComboBox.Text = "Please, select something"; 

Con un po 'di codice è possibile gestire questo scenario piuttosto facile.

Problemi correlati