- PR -

mainFormとsubFormの連動。

1
投稿者投稿内容
にしお
常連さん
会議室デビュー日: 2003/12/01
投稿数: 44
投稿日時: 2004-01-13 18:27
お世話になっております。にしおです。

【前提】
○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の主キーを削除しても、しなくても同じ結果になります。
解決策が、見えなくなってしまったので、書き込みをさせていただきました。
どうか、皆様のお力をお借りしたいのです。
小さな事でもよいので、どうぞ宜しくお願いいたします。


[ メッセージ編集済み 編集者: にしお 編集日時 2004-01-13 18:28 ]
にしお
常連さん
会議室デビュー日: 2003/12/01
投稿数: 44
投稿日時: 2004-01-14 07:34
問題を切り分けて考え、独立して2つのテーブルが表示されるか試したところ、正しく表示されました。
つづいて、データアダプタの抽出条件は入力せずに純粋にリレーションが組めるか試したところ、データグリッドには正しく値が入りました。

ただし、アダプターの部分で、抽出条件をつけると表示できなくなってしまいます。
DataAdapter_mainのageの欄に=1という条件をつけます。
そうすると、Table mainのageが=1のIDと関連づけられた、Table subの値がデータグリッドに表示されるはずですよね?
それが、上記のようなエラーが表示されてしまうのです。

これはどういうことでしょうか・・・。
どんなに小さなことでもいいので、お力添えをいただけると、大変助かります。
説明が長くなってしまい、わかりづらくなってしまい申しわけありません。
宜しくお願いいたします。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-01-14 11:07
引用:

にしおさんの書き込み (2004-01-14 07:34) より:

DataAdapter_mainのageの欄に=1という条件をつけます。
そうすると、Table mainのageが=1のIDと関連づけられた、Table subの値がデータグリッドに表示されるはずですよね?



ここの認識がちがってるよーな。
DataAdapter_subのほうにFillで読み込まれるのはすべての
データじゃないでしょうか。
なので、制約違反のデータをいれようとしている、と
怒られるのでは?

#2つの掲示板に同じ話をのせて、片方でヒントもらった
 結果をこっちにだけ書く、というのはやらないでほしいな。
 話をつなげるのが面倒になるから。
1

スキルアップ/キャリアアップ(JOB@IT)