ComboBox DataBinding не показывает значение, почему? - PullRequest
2 голосов
/ 26 июля 2011

У меня есть класс со следующей структурой:

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 у меня естьComboBox с именем ComboBox1 и BindingSource с именем = BindingSource1, после заполнения списков связывания я могу установить 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 голосов
/ 25 апреля 2019

У меня была такая же проблема, я обнаружил, что единственным решением было игнорировать привязки данных и реализовать те же функции вручную, используя событие Combobox.SelectionChangeCommitted для регистрации изменений в комбинированном ящике и Combobox.SelectedItem для первоначальной установки элемента.

Я использовал что-то вроде

comboBox.SelectedItem = comboBox.Items
                                .Cast<Usuario>()
                                .FirstOrDefault(u => u.IdGrupo.Equals(usuario.Grupo.IdGrupo));
0 голосов
/ 26 июля 2011

Чтобы определить, что может происходить: установите точку останова в установщике свойства Grupo;затем проследите, чтобы вызывающий установщик вызывался, когда DataSource устанавливается так, что значение Grupo изменяется с того, что было загружено из хранилища (возможно, на ноль).

Если это так,попробуйте установить поле со списком DataSource после добавления привязки.

0 голосов
/ 25 июня 2015
BindingSource1.DataSource = Usuariolst;
ComboBox1.DataSource = Grupolst;
ComboBox1.DisplayMember = "Descricao";
// This will do the trick
ComboBox1.ValueMember = "IdGrupo";
0 голосов
/ 26 июля 2011

Укажите режим обновления 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...