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();
}
助けてください...