DOBON.NET DOBON.NETプログラミング掲示板過去ログ

メインフォームとサブフォームの関連。

環境/言語:[C#、.NET Frameworkのバージョン1.1]
分類:[.NET]

おはようございます。yukiです。

【前提】
○Table_main
ID(主キー:数値型)・name・age
○Table_sub
No(主キー:オートナンバー)・ID・money・check
○DataAdapter_main
○DataAdapter_sub
○DataSet_relation
(DataAdapter_mainとDataAdapter_subから作成。)
(XMLスキーマを表示し、2つのテーブルにIDをキーにリレーションを作成する。親要素はTable_main、子要素はTable_subです。リレーションシップ名はorderです。)

Form上には、テキストボックスが3つ、データグリッドが1つ、ボタンが1つ配置されている。
DataGrid1に、DataSorceとして、DataSet_relationを、DataMemberとして、Table_main.orderとしてあります。
さらに、DataGridTableStyleオブジェクトを追加。MappingNameをTable_subとし、DataGrdColumnStyleオブジェクトを追加。MappingNameをTable_subのmoneyと、
Table_subのcheckとし、2つ作成します。

テキストボックス3つには、それぞれ、
DataSet_relation-Table_main.ID
DataSet_relation-Table_main.name
DataSet_relation-Table_main.ageがデータバインドされています。

そして、ボタンの裏にC#で
DataSet_relation.clear();
DataAdapter_main.Fill(DataSet_relation,"Table_main");
DataAdapter_sub.Fill(DataSet_relation,"Table_sub");
というコードを書きます。

これで、ボタンを押すと、テキストボックスには、Table_mainのID・name
・ageが表示され、DataGridにはテキストボックスのIDとして表示されているものと同じIDを持ったTable_subの中のデータであるmoneyとcheckが表示されるはずです。
しかし、DataAdapter_sub.Fill(DataSet_relation,"Table_sub");
というコードの部分で、

'System.Data.ConstraintException' のハンドルされていない例外が system.data.dll で発生しました。
追加情報 : 制約を有効にできませんでした。1 つ以上の行に、Null か、一意でないか、または外部キー制約違反の値が含まれています。

というエラーメッセージが表示されてしまいます。
リレーションを組むときに、Table_subのNoの主キーを削除しても、しなくても同じ結果になります。私には解決策がわからなくなってしまいました。

どうか、皆様のお力をお借りしたいのです。
小さな事でもよいので、どうぞ宜しくお願いいたします。
> 'System.Data.ConstraintException' のハンドルされていない例外が system.data.dll で発生しました。
> 追加情報 : 制約を有効にできませんでした。1 つ以上の行に、Null か、一意でないか、または外部キー制約違反の値が含まれています。

制約を作成する必要がなければ、
リレーションシップの作成時に Constraints (制約)をFalseにしてみてください。
独立では表示されます。
さらに、ただ単純にリレーションをつけても表示されます。
ただし、アダプターの部分で、抽出条件をつけると表示できなくなってしまいます。
DataAdapter_mainのageの欄に=1という条件をつけます。
そうすると、Table mainのageが=1のIDと関連づけられた、Table subの値がデータグリッドに表示されるはずですよね?
それが、上記のようなエラーが表示されてしまうのです。

これはどういうことでしょうか・・・。

DOBON.NET | プログラミング道 | プログラミング掲示板