【问题标题】:C# Windows Forms: Retrieve value from ComboBox ValueMember populated with entity frameworkC# Windows 窗体:从填充有实体框架的 ComboBox ValueMember 中检索值
【发布时间】:2017-06-08 16:25:36
【问题描述】:

我有一个 ComboBox,我从实体框架模型中填充它。

ComboBox.DataSource = (from x in _context.myTable
                                         where x.isActive == true
                                         select new {
                                                        x.Name,
                                                        x.ID
                                                    }
                                         ).Distinct().ToList();

ComboBox.DisplayMember = "Name";
ComboBox.ValueMember = "ID";
ComboBox.SelectedIndex = -1;
ComboBox.Invalidate();

问题是:每次Combox选择改变时,我想检索myTable(SQL Server表)的ID(PK标识号)列后面的信息,但是ComboBox.SelectedValue返回的标识号错误。 实际上,它返回 Index + 1。

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    Console.WriteLine("ComboBox.SelectedValue=" + ComboBox.SelectedValue);        
}

您能建议吗?

【问题讨论】:

  • 你在哪里绑定数据源?你只做 If !PostBack 吗?
  • 对不起,我不明白你的问题... :(
  • 你在哪里设置组合框数据源?如果它在页面加载中,您必须确保它仅在不是回发时运行。

标签: c# winforms entity-framework combobox valuemember


【解决方案1】:

我也遇到了同样的问题,我找到了一个非常简单的解决方案。 可能是绑定comboBox有问题,可以试试this code绑定comboBox。

using (DatabaseEntities db_entity = new DatabaseEntities())
        {
            comboBox1.DataSource = db_entity.TableName.ToList();
            comboBox1.ValueMember = "ID";
            comboBox1.DisplayMember = "Name";
        }

您可以检索 ValueMember(在您的情况下为“ID”)。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (comboBox1.SelectedIndex > 0)
        {
            int _id = Convert.ToInt32(comboBox1.SelectedValue);
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多