2011-08-01 12 views
2

私はVB.netとWPF(および一般的なプログラミング)をかなり新しくしていますので、私にご負担ください。私は学習プロジェクトとして自分のビジネスに役立つデータベースアプリケーションを作成しようとしています。私は(非常に良い)Murachの本を参照して、WinFormsでドラフトを行いましたが、今はWPFのUIとよりクリーンなコードで書き直そうとしています。WPFの親行に簡単にバインドする方法はありますか?

私はWPFバインディングの基本を理解していると思いますが、親の詳細にバインドする簡単な方法を見つけるために私の髪を引き裂いています - 私は非常に基本的なシナリオだと思っていましたが、その上に。たとえば、私は

  • 「顧客」テーブルにCustomerID、名前、さまざまな連絡先の詳細、次に外部キーCityIDおよびGroupIDを持つとします。
  • CityID、CityNameおよび外部キーStateIDを持つ 'City'テーブル。
  • StateID、StateNameを持つ 'State'テーブル。
  • グループIDを持つ「グループ」テーブル、GroupNameの関係などとtableadaptersの束を含む強く型付けされたデータセットと

...。

私がこのケースでしたいのは、特定の顧客の詳細を表示することです(ユーザーがCustomerIDを入力したとき)。私は簡単に 'Customers'テーブルのデータにバインドできますが、どのようにして関連テーブルからCityName、StateNameおよびGroupNameを取得するためにバインディングを使用しますか?以下の部分的な例。

...

<Window.Resources> 
    <CollectionViewSource x:Key="CustomersViewSource" 
          Source="{Binding Path=Customers,Source={StaticResource CustomersDataSet}}" /> 
</Window.Resources> 
<Grid DataContext="{Binding Source={StaticResource CustomersViewSource}}"> 
    <TextBox Name="customerName" Text="{Binding Path=Name}" /> 
    <TextBox Name="customerPhone" Text="{Binding Path=PhoneNumber}" /> 
</Grid> 
<Grid> 
    <Label Name="lblGroup" Content="[needs to bind to GroupName]"> 
    <Label Name="lblCity" Content="[needs to bind to CityName]"> 
</Grid> 

私は簡単ですマスター/詳細シナリオを、設定上の記事を読んだので、私は使用することにより、例えば、選択した都市のためのデータグリッドに顧客を結合することができます外部キーを顧客コントロールのバインディングパスとして使用します。ここで私はそれをもう一度やり直そうとしていますが、選択した顧客に基づいて親の詳細を調べます。誰かが正しい方向に私を振る舞うことができますか?

これを失敗すると、私はVBでしか実行できませんでした。それはかなり厄介です。私はこのような、何かをCustomerViewSourceを作成し、関連する顧客を見上げて、私のデータセット内の各種テーブルを埋めてきたと仮定すると:私は不器用かかわらず、これを実行する必要はありません

Dim rowCustomer As System.Data.DataRowView = CustomerViewSource.View.CurrentItem 
Dim drCustomer As System.Data.Datarow = rowCustomer.Row 
Dim drGroup as drCustomer.GetParentRow("FK_Customers_Groups") 
lblGroup.Content = drGroup.Item("GroupName") 

.. 。 したほうがいい?

もう1つ:テーブルアダプターのパラメータ化されたクエリを使用してデータセットを入力して顧客を選択しています。

SELECT CustomerID, CustomerName 
FROM Customers 
WHERE CustomerID = @CustomerID 

そして最初のレコードに移動します(1つだけになるので)。これは顧客を探す通常の方法ですか?私はまた、顧客の行から外部キーを取得し、データセット内の異なるテーブルをすべてパラメータ化されたクエリを使用して充填し、各テーブルに別々にバインドすることでこのメソッドを使用することもできます。

この問題の助け、または一般的な助言、大いに感謝します。私が十分にはっきりしていない(または良い例が示されている)場合は、さらに説明してください。乾杯。

答えて

1

まず、実際には子の行で、親の行ではありません。ちょっと直感的ではありませんが、親は1対多の関係の「一方」であり、子供は「多数」です。したがって、グループ、市、州はすべて顧客の親です。コード例はこれを示しています。

次に、DataTableDataColumnを作成し、その式を設定することで、ここで実行しようとしているすべてのことを達成できます。 StateNameという名前の列を作成し、その式をParent(FK_Customers_States).StateNameに設定します。これで、他の列にバインドする方法とバインドできます。

+0

ブリリアント、ありがとう、ロバート、私は表現を全く知らなかった、そして、それは私がここで知る必要があったものです。おそらく、私は前進して、プログラミングに没頭する前に、ADO.NETの周りにもっと徹底的に頭を浮かべてください。そして、はい、私はどちらが親/子供と、おそらくちょうどそれを正しく言っていないか理解しています。乾杯。 –