2012-07-07 6 views
13

Devo inserire "Seleziona" in alto dopo che combobox è associato al set di dati. Ho provato this ma non funziona. Errore Tows "Il set di dati non ha alcun definizione per cast ". Penso di non usarlo correttamente. Il codice corretto è la parte che ho provato ma non funziona.inserisci l'elemento in una casella combinata dopo averlo collegato da un set di dati in C#

cmbCategory.DataSource = dsCat.Tables[0]; 
cmbCategory.DisplayMember = "CategoryName"; 
cmbCategory.ValueMember = "ID"; 
// cmbCategory.Items.Add("Select"); 
// cmbCategory.SelectedText = "Select"; 
// cmbCategory.DataSource =(new object[] { "Select" }).Concat(this.liveReportingDalc.GetCategoriesByType(CategoryType.RegistrationType).Cast<object>()); 

risposta

20

Devi inserire nell'oggetto a cui ti stai collegando in base ai dati piuttosto che alla casella combinata. Non è possibile inserire direttamente nella casella combinata.

È possibile utilizzare questo:

DataTable dt = new DataTable(); 

dt.Columns.Add("ID", typeof(int)); 
dt.Columns.Add("CategoryName"); 

cmbCategory.DisplayMember = "CategoryName"; 
cmbCategory.ValueMember = "ID"; 
cmbCategory.DataSource = dt; 

DataRow dr = dt.NewRow(); 
dr["CategoryName"] = "Select"; 
dr["ID"] = 0; 

dt.Rows.InsertAt(dr, 0); 
cmbCategory.SelectedIndex = 0; 

Questo è molto semplice esempio in avanti.

+0

Ho provato il tuo suggerimento, ma ricevo un errore che dice "Una colonna denominata" CODE "appartiene già a questo DataTable. – sam

6

Non è possibile aggiungere elementi a un ComboBox dopo il legame a una fonte di dati. Per aggiungere o rimuovere elementi da un ComboBox con un'origine dati associata, è necessario farlo attraverso l'origine dati stessa.

È possibile inserire un numero DataRow nella tabella e verrà aggiunto automaticamente al numero ComboBox. Prova il seguente:

DataRow dr = dsCat.Tables[0].NewRow(); 
dr["CategoryName"] = "Select"; 
dr["ID"] = 123;// Some ID 
dsCat.Tables[0].Rows.Add(dr); 
+0

Il metodo Aggiungi da dsCat.Tables [0] .Add (dr); non funziona. – abramlimpin

+0

@abramlimpin È necessario chiamare Aggiungi nella proprietà Righe della tabella. Ho modificato il codice con quell'aggiornamento – user

0
// cmbCategory.DataSource =(new object[] { "Select" }).Concat(this.liveReportingDalc.GetCategoriesByType(CategoryType.RegistrationType).Cast<object>()); 

Potrebbe essere possibile farlo, ma la sintassi è errata in qualche modo.

Forse è possibile dividerlo fino a quando non lo si capisce e quindi comprimerlo di nuovo in funzioni in linea.

List <object> catData = new List <object> { "Select" }; 

DataSet catByType = this.liveReportingDalc.GetCategoriesByType(CategoryType.RegistrationType); 

foreach(DataRow oRow in catByType.Tables[0].Rows) 
{ catData.Add(oRow.ItemArray[0]); } 

Ma per far funzionare tutto questo è necessario per consolidare la comprensione dei dati provenienti indietro dalla funzione GetCategoriesByType. Gli oggetti saranno testo come "Seleziona" ?.

Problemi correlati