[C#] C # - Riempi una casella combinata con un DataTable


Answers

string strConn = "Data Source=SEZSW08;Initial Catalog=Nidhi;Integrated Security=True";
SqlConnection Con = new SqlConnection(strConn);
Con.Open();
string strCmd = "select companyName from companyinfo where CompanyName='" + cmbCompName.SelectedValue + "';";
SqlCommand Cmd = new SqlCommand(strCmd, Con);
SqlDataAdapter da = new SqlDataAdapter(strCmd, Con);
DataSet ds = new DataSet();
Con.Close();
da.Fill(ds);
cmbCompName.DataSource = ds;
cmbCompName.DisplayMember = "CompanyName";
cmbCompName.ValueMember = "CompanyName";
//cmbCompName.DataBind();
cmbCompName.Enabled = true;
Question

Sono abituato a lavorare con Java dove sono disponibili grandi quantità di esempi. Per vari motivi ho dovuto passare a C # e provare a fare quanto segue in SharpDevelop:

// Form has a menu containing a combobox added via SharpDevelop's GUI

// --- Variables
languages = new string[2];
languages[0] = "English";
languages[1] = "German";
DataSet myDataSet = new DataSet();

// --- Preparation
DataTable lTable = new DataTable("Lang");
DataColumn lName = new DataColumn("Language", typeof(string));
lTable.Columns.Add( lName );
for( int i=0; i<languages.Length; i++ ) {
    DataRow lLang = lTable.NewRow();
    lLang["Language"] = languages[i];
    lTable.Rows.Add(lLang);
}
myDataSet.Tables.Add(lTable);

// --- Handling the combobox
mnuActionLanguage.ComboBox.DataSource = myDataSet.Tables["Lang"].DefaultView;
mnuActionLanguage.ComboBox.DisplayMember = "Language";

Si potrebbe presumere di vedere alcuni valori nel menu a discesa, ma è vuoto. Per favore dimmi cosa sto facendo male, (

EDIT: mnuActionLanguage.ComboBox.DataBind () è quello che ho trovato anche in rete, ma nel mio caso non funziona.

SOLUZIONE

mnuActionLanguage.ComboBox.BindingContext = this.BindingContext;

alla fine ha risolto il problema!




Questa linea

mnuActionLanguage.ComboBox.DisplayMember = "Lang.Language";

è sbagliato. Cambiarlo in

mnuActionLanguage.ComboBox.DisplayMember = "Language";

e funzionerà (anche senza DataBind ()).




Alcuni punti:

1) "DataBind ()" è solo per le app Web (non per le app di Windows).

2) Il tuo codice sembra molto "JAVAish" (non una cosa negativa, solo un'osservazione).

Prova questo:

mnuActionLanguage.ComboBox.DataSource = languages;

Se ciò non funziona ... allora presumo che la tua origine dati venga calpestata da qualche altra parte nel codice.