2013-12-16 11 views
5

Ho un ComboBox, ed è così che mi riempio i dati in esso:predefinito DataSource in ComboBox C#

SectorCollection sectorCollection = sectorController.SearchAll(); 

comboSector.DataSource = null; 

comboSector.DataSource = sectorCollection; 
comboSector.DisplayMember = "titleSector"; 
comboSector.ValueMember = "idSector"; 

Quello che voglio è quello di impostare un dato pre, come un testo nella casella combinata senza valore. Come "Seleziona un settore". Quindi l'utente può sapere cosa sta selezionando.

+3

È winform o asp.net? – Steve

risposta

3

Se si utilizza una casella combinata WinForm allora si dovrebbe codice qualcosa di simile

sectorCollection.Insert(0, new Sector() {idSector=0, titleSector="Select a sector"}) 

comboSector.DataSource = sectorCollection; 
comboSector.DisplayMember = "titleSector"; 
comboSector.ValueMember = "idSector"; 

È necessario aggiungere la richiesta di selezione come nuova Sector istanza aggiunto alla raccolta e quindi associare la raccolta alla tua casella combinata. Naturalmente questo potrebbe essere un problema se si utilizza la raccolta per altri scopi a parte dal display combinato

+0

Questo ha funzionato, grazie. – Jonas452

+0

+1 abbastanza vicino a quello che dovevo essere utile. – ghostJago

+1

@ghostJago cosa manca per essere totalmente utile? – Steve

4

basta inserire un nuovo elemento di indice 0 come predefinito dopo l'DataBind():

comboSector.DataSource = sectorCollection; 
comboSector.DisplayMember = "titleSector"; 
comboSector.ValueMember = "idSector"; 
comboSector.DataBind(); 

comboSector.Items.Insert(0, "Select a Sector."); 

Se questo è WinForms (non hai detto), allora si potrebbe aggiungere un nuovo elemento alla sectorCollection in corrispondenza dell'indice 0 prima di assegnarlo alla casella combinata. Tutti gli altri codice rimane la stessa:

sectorCollection.Insert(0, new Sector() { idSector = 0, titleSector = "Select a sector." }); 
+0

+1 Per la soluzione corretta, concisa e ampiamente utilizzata. – nestedloop

+0

Ma non esiste alcun metodo "DataBind" in un ComboBox, ho capito che devo associare i dati alla casella combinata in modo da poterli modificare. Ma come posso farlo? – Jonas452

+0

È questo winforms? – DGibbs

1

Penso piuttosto che aggiungere un elemento fittizio, che sarà sempre in cima all'elenco, basta impostare SelectedIndex su - 1 e aggiungi il tuo testo:

comboBox1.SelectedIndex = -1; 
comboBox1.Text = "Select an item";