1

有 1 个带有 bindingNavigator 控件的 winForm,2 个绑定到 bindingsource 控件的网格:1 个网格用于类别(主)和 1 个网格用于产品(详细),数据和关系加载良好。

现在,我尝试将新的(主)记录添加到类别:

对于接下来的两种情况,我遇到了问题:

第一种情况:当我单击“+”按钮而不输入任何内容时,未添加“新类别”并且我收到消息:“无法将值 NULL 插入到列‘CategoryName’,表‘Northwind.dbo.Categories’;列没有允许空值。INSERT 失败。\r\n语句已终止。" 尽管用代码填充它。

第二种情况:当我单击“+”按钮并在 CategoryName 单元格中手动输入内容时,单击保存按钮后它会被保留,但我收到消息:“对数据库的更改已得到验证,但更新时发生错误对象上下文。ObjectContext 可能处于不一致状态。内部异常消息:AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突。请确保键值是唯一的,然后再调用 AcceptChanges”。

这是我的代码:

        NorthwindEntities ctx;
    bool _adding;

    private void Form2_Load(object sender, EventArgs e)
    {
        ctx = new NorthwindEntities();
        categoriesBindingSource.DataSource = ctx.Categories;
    }

    private void categoriesBindingSource_AddingNew(object sender, AddingNewEventArgs e)
    {
        _adding = true;
    }

    private void categoriesBindingSource_CurrentChanged(object sender, EventArgs e)
    {
        if (_adding)
        {

            categoriesBindingSource.EndEdit();
            var newCat = (Categories)categoriesBindingSource.Current;
            if (newCat.Products == null)
            {
                Products Prd = new Products();
                Prd.Discontinued = false;
                Prd.ProductName = "New Product Name";
                ctx.AddToProducts(Prd);
            }
            newCat.CategoryName = " New Category";
            ctx.AddToCategories(newCat);
            _adding = false;
        }
    }

    private void categoriesBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
        categoriesBindingSource.EndEdit();
        ctx.SaveChanges();
    }

请帮忙...

4

0 回答 0