如何通过传递ValueMember从组合框中获取值

时间:2017-04-29 13:20:31

标签: c# visual-studio entity-framework

我有一个包含2个表(产品和类别)的简单数据库,下面的代码是在产品表中的组合框中选择的某个类别下创建新产品。

public partial class frmAddProduct : Form
    {
        public frmAddProduct()
        {
            InitializeComponent();

            db = new DatabaseEntities();
        }

        DatabaseEntities db;
        string category = "";
        Product _product;

        private void frmAddProduct_Load(object sender, EventArgs e)
        {
            categoryBindingSource.DataSource = db.Categories.ToList();
            CategoryList();
        }

        private void CategoryList()
        {
            var list = db.Categories.ToList();
            cboCategory.DataSource = list;
            cboCategory.DisplayMember = "CategoryName";
            cboCategory.ValueMember = "CategoryID";

            if (cboCategory.Items.Count > 1)
                cboCategory.SelectedIndex = -1;
        }

        private void btnNew_Click_1(object sender, EventArgs e)
        {
            _product = new Product();

            int id = int.Parse(txtID.Text);
            decimal price = decimal.Parse(txtPrice.Text);
            int qty = int.Parse(txtPrice.Text);

            _product.ProductID = id;
            _product.ProductName = txtName.Text;
            _product.UnitPrice = price;
            _product.UnitsInStock = qty;
            _product.CategoryID = int.Parse(category);

            db.Products.Add(_product);
            db.SaveChanges();
        }

        private void cboCategory_SelectedIndexChanged(object sender, EventArgs e)
        {
            category = cboCategory.SelectedValue.ToString();
        }
    }

当我运行表单时,出现错误"附加信息:对象引用未设置为对象的实例"。错误引用代码中的下一行:

category = cboCategory.SelectedValue.ToString();

有谁知道这里有什么问题?

一个注意事项:CategoryID是数据库中的整数字段。

1 个答案:

答案 0 :(得分:1)

看起来你的SelectedIndex设置为-1会触发SelectedIndexChanged事件,而在您尝试在处理程序中读取的SelectedValue中没有任何内容。您可能缺少处理程序中的null检查。