1

bindingNavigator コントロールを持つ 1 つの winForm、bindingsource コントロールにバインドされた 2 つのグリッド: カテゴリ (マスター) 用の 1 つのグリッドと製品 (詳細) 用の 1 つのグリッド、データと関係が十分に読み込まれます。

ここで、新しい (マスター) レコードをカテゴリに追加しようとしています。

次の 2 つのケースでは、問題が発生します。

最初のケース:何も入力せずに「+」ボタンをクリックすると、「新しいカテゴリ」が追加されず、次のメッセージが表示されます:「列 'CategoryName'、テーブル 'Northwind.dbo.Categories' に値 NULL を挿入できません。 null を許可します。INSERT は失敗します。\r\nステートメントは終了しました。" コードで埋めたにもかかわらず。

2 番目のケース: [+] ボタンをクリックして [CategoryName] セルに手動で何かを入力すると、[保存] ボタンをクリックすると保持されますが、次のメッセージが表示されます:「データベースへの変更は検証されましたが、更新中にエラーが発生しましたオブジェクト コンテキスト。ObjectContext が矛盾した状態にある可能性があります。内部例外メッセージ: オブジェクトのキー値が ObjectStateManager の別のオブジェクトと競合しているため、AcceptChanges を続行できません。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