C# ComboBox数据绑定不显示值,为什么?

C# ComboBox数据绑定不显示值,为什么?,c#,data-binding,combobox,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

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

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();
所有CRUD都工作得很好,问题是当我加载Usuariolst并设置BindingSource1的当前位置时,组合框不会显示关联的正确值,但是当我保存设置的正确值时,我使用nhibernate来执行此操作


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

将更新模式指定为OnPropertyChanged:

编辑:尝试用USUARILST替换this.BindigSource1:


将更新模式指定为OnPropertyChanged:

编辑:尝试用USUARILST替换this.BindigSource1:


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


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

确定可能发生的情况:在Grupo属性设置器中放置断点;然后,注意在设置数据源时调用setter,以便Grupo值从存储库中加载的值更改为null

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

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

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

BindingSource1.DataSource = Usuariolst;
ComboBox1.DataSource = Grupolst;
ComboBox1.DisplayMember = "Descricao";
// This will do the trick
ComboBox1.ValueMember = "IdGrupo";
我用了类似

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

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

我用了类似

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

在bindingsource1 CurrentChanged事件中,如果获取bindingsource1.Current,Grupo属性设置正确,但组合框不匹配。。。我不知道发生了什么…我试图执行您的建议,但是Grupo属性是正确的值,如果我在事件BindingSource1\u CurrentChanged中放置断点,BindingSource1.Current中的值也是正确的,但是组合框不显示值。。。。谢谢有什么建议吗?恐怕那是我的秘密。可惜没用。过去,我在ComboBox SelectedValue和SelectedItem绑定方面经历了比平常更艰难的一段时间——主要是在更改或更新数据源后管理SelectedIndex。在bindingsource1 CurrentChanged事件中,如果我获得bindingsource1.Current,Grupo属性设置正确,但ComboBox不匹配。。。我不知道发生了什么…我试图执行您的建议,但是Grupo属性是正确的值,如果我在事件BindingSource1\u CurrentChanged中放置断点,BindingSource1.Current中的值也是正确的,但是组合框不显示值。。。。谢谢有什么建议吗?恐怕那是我的秘密。可惜没用。过去,我在使用ComboBox SelectedValue和SelectedItem绑定时遇到了比平时更困难的情况——主要是在更改或更新数据源后管理SelectedIndex。我像你告诉我的那样尝试过,但是。。。没用。。。我很害怕,我的组合框怎么了?我像你说的那样试过了,但是。。。没用。。。我很害怕,我的组合框怎么了?我也有同样的问题。我还没有解决办法-我有完全相同的问题。我还没有解决办法-如果要向组合框显示数据源中的当前值,则需要设置属性ValueMember如果要向组合框显示数据源中的当前值,则需要设置属性ValueMember
comboBox.SelectedItem = comboBox.Items
                                .Cast<Usuario>()
                                .FirstOrDefault(u => u.IdGrupo.Equals(usuario.Grupo.IdGrupo));