WindowsフォームアプリケーションでVS2008C#ExpressとNorthwindデータベースを使用しています。
ドラッグアンドドロップを使用して、2つのデータグリッドビューのマスター詳細バインディング(注文と注文詳細を使用)を設定しました。この時点で、すべてが期待どおりに機能します。テーブルのすべての行を返さないように、OrdersテーブルのフィルターとOrdersDetailsテーブルのフィールドに基づいてOrdersテーブルをフィルター処理したいと思います。TableAdapter構成ウィザードで、クエリビルダーを使用して、次のクエリを作成する新しいFillByMyFilterを追加しました。
SELECT Orders。[OrderID]、Orders。[Customer ID]、Orders。[Employee ID]、Orders。[Ship Name]、Orders。[Ship Address]、Orders。[Ship City]、Orders。[Ship Region]、 Orders。[ShipPostalCode]、Orders。[Ship Country]、Orders。[Ship Via]、Orders。[Order Date]、Orders。[Required Date]、Orders。[Shipped Date]、Orders.Freight FROM Orders INNER JOIN [注文の詳細]ON注文。[注文ID]=[注文の詳細]。[注文ID]WHERE(注文。[船名] LIKE N'A%')AND([注文の詳細] .Quantity <20)
両方のテーブルを追加することでこれを取得しましたが、元の塗りつぶしクエリで使用された列のみが返されるように、[注文の詳細]テーブルのフィールドボックスをチェックしませんでした。この時点では、マスターテーブルのDataSetをフィルタリングするだけで、異なる数の列を返すことはありません。Order Detailsの子行は、デフォルトのフィルタリングされていない結果セットのように機能するはずです。
ここで問題が発生します。[クエリの実行]ボタンをクリックすると、正常に機能します。デザイナーが作成したデフォルトの塗りつぶしを使用して、1078ではなく上記のクエリから53行を取得します。元の塗りつぶしクエリと同じ列を返します。ただし、アプリケーションを実行しようとすると、次の制約エラーが発生します。
「制約を有効にできませんでした。1つ以上の行に、null以外、一意、または外部キーの制約に違反する値が含まれています。」
私は何が間違っているのですか?
更新:ウィザードによって作成された内部結合が原因で、制約エラーが発生していると思います。LEFT JOINを使用するようにクエリを編集すると、ウィザードはそれをINNERJOINに戻します。
私の質問は、親テーブルと子テーブルの両方の基準に基づいて、親テーブル(Orders)のレコードをフィルタリングする方法としてまだ立っています。次のテストは、ストアドプロシージャを試して使用することですが、TableAdapterのカスタムFillByメソッドのみを使用する方法を知りたいと思います。
よろしく、
デバッグ