【问题标题】:How to get value from combo box by passing its ValueMember如何通过传递其 ValueMember 从组合框中获取值
【发布时间】:2017-04-29 13:20:30
【问题描述】:

我有一个包含 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 是数据库中的整数字段。

【问题讨论】:

  • 调试时,该行的哪个值是null
  • 而不是使用:cboCategory.SelectedValue.ToString(); 使用cboCategory.Text; 这将获得选定的文本。
  • 使用cboCategory.Text; 值成员是“CategoryID”没有意义,它是产品表中的外键。这就是我输入cboCategory.SelectedValue.ToString();的原因
  • 大卫,错误出现在这里:private void cboCategory_SelectedIndexChanged(object sender, EventArgs e) { category = cboCategory.SelectedValue.ToString(); }

标签: c# visual-studio entity-framework


【解决方案1】:

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

【讨论】:

  • 谢谢大家。这导致了我的错误。这里还有一个问题。现在,当我删除它时,我怎样才能拥有没有事先选择的组合框?感谢所有回答或评论我的问题的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多