Saya ingin menghubungkan BindingSource
ke daftar objek kelas dan kemudian nilai objek ke ComboBox.
Adakah yang bisa menyarankan bagaimana melakukannya?
public class Country
{
public string Name { get; set; }
public IList<City> Cities { get; set; }
public Country()
{
Cities = new List<City>();
}
}
adalah kelas saya dan saya ingin mengikat name
bidangnya ke BindingSource yang kemudian dapat dikaitkan dengan ComboBox
c#
winforms
data-binding
combobox
Mobin
sumber
sumber
Jawaban:
Karena Anda mengacu pada kotak kombo, saya berasumsi Anda tidak ingin menggunakan penyatuan data 2 arah (jika demikian, lihat menggunakan a
BindingList
)Untuk menemukan negara yang dipilih di combobox terikat, Anda akan melakukan sesuatu seperti:
Country country = (Country)comboBox1.SelectedItem;
.Jika Anda ingin ComboBox diperbarui secara dinamis, Anda harus memastikan bahwa struktur data yang telah Anda tetapkan sebagai
DataSource
implementIBindingList
; salah satu struktur seperti ituBindingList<T>
.Tip: pastikan Anda mengikat
DisplayMember
ke Properti di kelas dan bukan ke bidang publik. Jika Anda menggunakan kelaspublic string Name { get; set; }
itu akan berhasil tetapi jika menggunakannyapublic string Name;
tidak akan dapat mengakses nilai dan sebaliknya akan menampilkan tipe objek untuk setiap baris di kotak kombo.sumber
bindingSource1
deklarasi?comboBox1.DataSource = bindingSource1.DataSource;
benar? atau seharusnyacomboBox1.DataSource = bindingSource1;
?Untuk backgrounder, ada 2 cara menggunakan ComboBox / ListBox
1) Tambahkan Objek Negara ke properti Item dan ambil Negara sebagai Item yang Dipilih. Untuk menggunakan ini, Anda harus mengganti ToString Negara.
2) Gunakan DataBinding, atur DataSource ke IList (List <>) dan gunakan DisplayMember, ValueMember dan SelectedValue
Untuk 2) Anda memerlukan daftar negara terlebih dahulu
Dan kemudian di SelectionChanged,
sumber
ledakan.
sumber
Coba sesuatu seperti ini:
Dan jika Anda menggunakan WebForms, Anda perlu menambahkan baris ini:
sumber
Ini adalah kode yang saya gunakan sekarang.
sumber
Jika Anda menggunakan ToolStripComboBox, tidak ada DataSource yang terpapar (.NET 4.0):
sumber
ToolstripComboBox.ComboBox.DataSource
. SepertinyaToolstripComboBox
ini adalah pembungkus untuk yang normalComboBox
.