我有一个包含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是数据库中的整数字段。
答案 0 :(得分:1)
看起来你的SelectedIndex设置为-1会触发SelectedIndexChanged事件,而在您尝试在处理程序中读取的SelectedValue中没有任何内容。您可能缺少处理程序中的null检查。