【问题标题】:ComboBox doesn't load usersComboBox 不加载用户
【发布时间】:2010-10-29 12:42:04
【问题描述】:
private void LoadUsersToComboBox()
{
    comboBox1.DataSource = null;
    comboBox1.DataSource = peopleRepo.FindAllPeople(); /*Returns IQueryable<People>*/
    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember = "ID";            
}

private void button2_Click(object sender, EventArgs e)
{            
    CreateNewPerson();            
    LoadUsersToComboBox();
}

private void CreateNewPerson()
{
    if (textBox2.Text != String.Empty)
    {
        Person user = new Person()
        {
            Name = textBox2.Text
        };

        peopleRepo.Add(user);
        peopleRepo.Save();
    }            
}

我希望组合框在每次保存后显示用户列表。因此,有人创建了一个新用户,然后它应该立即显示在组合框中。这不起作用,没有添加新用户,似乎只有初始“加载”有效。

【问题讨论】:

  • 三件事 - 1. 你不需要初始的comboBox1.DataSource = null; 2. 对peopleRepo.FindAllPeople(); 的调用是同步的吗?和 3. 如果您删除对 CreateNewPerson(); 的调用会发生什么?

标签: c# winforms datasource


【解决方案1】:

Complex DataBinding 接受 IList 或 IListSource 作为数据源。

private void LoadUsersToComboBox()
{
    // comboBox1.DataSource = null; // No need for this

    comboBox1.DataSource = peopleRepo.FindAllPeople().ToList(); /*Returns IQueryable<People>*/
}

不要每次刷新都重新分配 DisplayMember 和 ValueMember,只需一次,

public Form1()
{
    InitializeComponent();

    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember = "ID";
    LoadUsersToComboBox()
}

祝你好运!

【讨论】:

  • 感谢您的帮助!当计时器结束时,我会接受这个作为解决方案。
  • @Sergio Tapia:欢迎,让我知道结果。
猜你喜欢
  • 2022-12-17
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 2019-02-15
相关资源
最近更新 更多