ComboBox DataBinding没有显示值,为什么?

时间:2011-07-25 20:41:22

标签: c# data-binding combobox

我有一个具有以下结构的类:

public class Grupo
{
    public virtual int IdGrupo { get; private set; }
    public virtual string Descricao { get; set; }
}

public class Usuario
{
    public virtual int IdUsuario { get; private set; }
    public virtual Grupo Grupo { get; set; }
    public virtual string Login { get; set; }
    public virtual string Senha { get; set; }
    public virtual bool Administrador { get; set; }
}

我有一个实现一些方法来填充BindingList的类:

BindingList<Usuario> Usuariolst = UsuarioRepository.GetAll();
BindingList<Grupo> Grupolst = GrupoRepository.GetAll();

在我的Form1中,我有一个名为ComboBox1的ComboBox和一个名为= BindingSource1的BindingSource,在填充绑定列表之后,我可以将ComboBox设置为列表:

BindingSource1.DataSource = Usuariolst;
ComboBox1.DataSource = Grupolst;
ComboBox1.DisplayMember = "Descricao";
ComboBox1.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.BindingSource1, "Grupo", true));

所有CRUD都很好用,问题是当我加载Usuariolst并设置BindingSource1的当前位置时,组合框不会显示正确的关联值,但是当我保存正确的值设置时,我正在使用nhibernate来做此

组合框数据绑定似乎正确链接,因此未显示正确的值。

4 个答案:

答案 0 :(得分:0)

将更新模式指定为OnPropertyChanged

ComboBox1.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", 
    this.BindingSource1, "Grupo", true, DataSourceUpdateMode.OnPropertyChanged));

修改:尝试将this.BindigSource1替换为Usuariolst

ComboBox1.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", 
    Usuariolst, "Grupo", true, DataSourceUpdateMode.OnPropertyChanged));

答案 1 :(得分:0)

确定可能发生的事情:在Grupo属性设置器中放置一个断点;然后注意在设置DataSource时调用的setter,以便Grupo值从存储库中加载的值(可能为null)更改。

如果是这种情况,请在添加绑定后尝试设置组合框DataSource。

答案 2 :(得分:0)

我遇到了同样的问题,我发现唯一的解决方案是忽略数据绑定并手动实现相同的功能,使用Combobox.SelectionChangeCommitted事件将更改注册到组合框,并使用Combobox.SelectedItem设置项目最初。

我用过类似的东西

comboBox.SelectedItem = comboBox.Items
                                .Cast<Usuario>()
                                .FirstOrDefault(u => u.IdGrupo.Equals(usuario.Grupo.IdGrupo));

答案 3 :(得分:-1)

BindingSource1.DataSource = Usuariolst;
ComboBox1.DataSource = Grupolst;
ComboBox1.DisplayMember = "Descricao";
// This will do the trick
ComboBox1.ValueMember = "IdGrupo";