将控件绑定到对象集合

时间:2013-03-07 09:06:01

标签: c# collections binding

我需要数据绑定方面的帮助。想象一下这种情况。我有两个类,一个名为Isotope,另一个名为Photon。类同位素包含BindingList Photons。我还有一个静态类StaticVariables,其中我放置了BindingList Isotopes。现在,我想制作一个表格,让我可以浏览同位素列表。我创建了一个组合框CBIsotopes,我绑定到StaticVariables.Isotopes:

 CBIsotope.DataSource = StaticVariables.Isotopes;
 CBIsotope.ValueMember = "IsotopeName";
 CBIsotope.DisplayMember = "IsotopeName";

到目前为止,一切正常。现在我想创建一个datagridview DGVPhotons,它将显示所选同位素的所有光子。我的第一直觉是沿着

的方式做点什么
DGVPhotons.DataSource = StaticVariables.ListOfIsotopes.Photons

当然,这不起作用。我尝试的另一件事是使用ComboBox的SelectedItem属性:

(1)

DGVPhotons.DataSource = (CBIsotope.SelectedItem as Isotope).Photons;

这有效,但不如我想的那么好。如果我在加载时执行,则没有任何反应,因为ComboBox为空。如果我在ComboBox中实际选择了一个项目时这样做,那么它可以工作,但是当我在ComboBox中更改选择时,DataGridView保持不变。解决方案是将line(1)放在ComboBox的SelectedIndexChanged中,但对我来说这似乎是一种蛮力方法,我觉得我的方法根本就是错误的......有没有更优雅的解决方案?

1 个答案:

答案 0 :(得分:0)

好的,这里的关键是使用DataBind解决方案。更改元素的source后,请不要忘记使用DataBind方法,以便绑定新数据。

此外,在PageLoad事件中,请勿忘记使用IsPostBack符号,以便仅在第一次处理请求时初始化页面。