从组合框Winforms / Entity Framework

时间:2017-11-08 14:18:52

标签: c# winforms entity-framework combobox

我正在尝试使用公司列表填充我的组合框,然后将所选公司(其Id)的价值添加到我的数据库中。

我有这个课程CBItem

public class CBItem
{
    public string Name { get; set; }
    public int Value { get; set; }

    public override string ToString()
    {
       return Name;
    }
}

我使用以下方法将项目添加到组合框:

using (var db = new DataContext())
{
    var list_of_companies = db.Companies;

    foreach (Company c in list_of_companies)
    {
        CBItem item = new CBItem();
        item.Name = c.Name;
        item.Value = c.Id;
        comboBox1.Items.Add(item);
    }
}

问题是当我想获得所选项目的价值时,我尝试过这样的事情:

new_person.Company.Id = (comboBox1.SelectedItem).Value;

当然它不起作用:/任何提示?

2 个答案:

答案 0 :(得分:0)

你是对的,这条线有问题: new_person.Company.Id 我不知道出了什么问题。我有模型Person,它有公司id的外键。 也许我的数据库模型有问题。 我的人物模型:

public class Person
    {
        public Person()
        {

        }
        public int PersonId { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Job { get; set; }
        public int Phone { get; set; }
        public int Mobile { get; set; }

        public Company Company { get; set; }
    }

公司型号:

public class Company
    {
        public Company()
        {

        }
        public int Id { get; set; }
        public string Name { get; set; }
        public int NIP { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public int Code { get; set; }
        public int Phone { get; set; }
        public string Notes { get; set; }

        public ICollection<Person> Person { get; set; }
    }

保存代码:

using (var db = new DataContext())
            {
                Person new_person = new Person();
                new_person.Name = textBox1.Text;
                new_person.Surname = textBox2.Text;
                new_person.Job = textBox3.Text;
                new_person.Phone = Int32.Parse(textBox4.Text);
                new_person.Mobile = Int32.Parse(textBox5.Text);
                new_person.Company.Id = (comboBox1.SelectedItem as CBItem).Value;
                db.Person.Add(new_person);
                db.SaveChanges();
                MessageBox.Show("Person successfully added!");
                this.Close();
            }

答案 1 :(得分:0)

如果符合以下条件,您的代码可以正常工作:

  • table.on('select', function() { var selectedRows = table.rows({ selected: true }); table.button(1).enable(selectedRows.count() > 0); table.button(2).enable(selectedRows.count() === 1); } ); 不是new_person
  • null不是new_person.Company
  • null不是combobox.SelectedItem

此外,您必须将null投射到combobox.SelectedItem,如下所示:

CBItem

作为站点注释而不是逐个添加每个项目,您可以通过将ComboBox通过其new_person.Company.Id = ((CBItem)comboBox1.SelectedItem).Value; 属性绑定到实现IList接口的对象或{{3}来归档相同的内容。 }}:

DataSource