Saya terbiasa bekerja dengan Java di mana banyak contoh tersedia. Untuk berbagai alasan saya harus beralih ke C# dan mencoba melakukan hal berikut di 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";
Seseorang akan berasumsi untuk melihat beberapa nilai dalam dropdown, tetapi kosong. Tolong beritahu saya apa yang saya lakukan salah;(
EDIT: mnuActionLanguage.ComboBox.DataBind() adalah apa yang juga saya temukan di internet, tetapi tidak bekerja dalam kasus saya.
SOLUSI
mnuActionLanguage.ComboBox.BindingContext = this.BindingContext;
pada akhirnya memecahkan masalah!
Apakah Anda menerapkan RowFilter ke DefaultView Anda nanti dalam kode? Ini bisa mengubah hasil yang dikembalikan.
Saya juga akan menghindari penggunaan string sebagai anggota tampilan jika Anda memiliki referensi langsung kolom data, saya akan menggunakan properti objek:
mnuActionLanguage.ComboBox.DataSource = lTable.DefaultView;
mnuActionLanguage.ComboBox.DisplayMember = lName.ColumnName;
Saya telah mencoba ini dengan form kosong dan combo standar, dan tampaknya bekerja untuk saya.
Beberapa poin:
"DataBind()" hanya untuk aplikasi web (bukan aplikasi windows).
Kode Anda terlihat sangat ' JAVAish ' (bukan hal yang buruk, hanya sebuah pengamatan).
Coba ini:
mnuActionLanguage.ComboBox.DataSource = languages;
Jika itu tidak berhasil... maka saya berasumsi bahwa sumber data Anda sedang diinjak di tempat lain dalam kode.