2016年9月20日火曜日

VB EF6 Entity Framework お試し 2 データソース作成

VB EF6  Entity Framework お試し 1 モデル作成 に続く作業です。
Data Source を生成し、 VS IDE で WPF Control を作成し易くしましょう。
唯、 この作業が終わっても、 取得・追加・削除・編集 等のデータ操作は行えません。
まぁ、準備作業の手順の ひとつ になります。


前回 の作業で、 Database と Project が紐付いた関係になっています。
今度は、Database と WPF Control を紐付けます。
Database の構造(スキーマ)に合った WPF Control を選択出来る様にします。
DataGrid とか、TextBox とか、CheckBox とか、 です。
Toolbox からではなく、 Data Source から、 WPF Control を選べる様にしましょう。
それには、 データソースを設定する必要があります。


手順は、
VIEW > Other Windows > Data Source と進み、
Add New Data Source... をクリックします。
ウィザードに従い、 Object を選択します。
  以下は、 Database Table 数が多い場合の方法です。.
Project をチェックし展開すると 自前の Project の Class が全て選択された状態になっている筈です。
そこから、Entity Framework が作成した Database Table の Class 以外を外します。
具体的には、 Application と xxxWindow と <db-name>Entities とを外します。
最終的に、Database のテーブルに基づく Class のみを選択
  (Wizard) Object > Next
             Project > (expand) > Project > (Check)(expand) > Application & xxxWindow & <db-name>Entities (UnCheck)
                                                             = Only [Class] <db-table>


ウィザードが完了すると、 Data Source が 準備され、 ここから Window に WPF Control としてドラッグが可能な状態になります。
各項目の ComboBox を展開すると  幾つかの候補として表示されます。
Entity Framework で複数形の名称で生成しても、 ここでの表示は Database Table の元の名称です。
更に、各列はスキーマで指定した型を継承したものが用意されています。


因みに、 Database のテーブルひとつを選択し、DataGrid で配置して見ます。
単に、IDE 上で Data Source から Window に ドラッグドロップするだけ で ここ迄やってくれます。


では、実際に、生成されたコードを。
写真管理システムから、その片鱗をお見せします。.
xaml
<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfAppEF6_DbFirstModel" mc:Ignorable="d" x:Class="MainWindow"
    Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <CollectionViewSource x:Key="CameraViewSource" d:DesignSource="{d:DesignInstance {x:Type local:Camera}, CreateList=True}"/>
    </Window.Resources>
    <Grid DataContext="{StaticResource CameraViewSource}">

        <DataGrid x:Name="CameraDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" Margin="60,40,60,80" ItemsSource="{Binding}" EnableRowVirtualization="True" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="CameCardColumn" Width="SizeToHeader" Header="Came Card" Binding="{Binding CameCard}"/>
                <DataGridTextColumn x:Name="CameFullColumn" Width="SizeToHeader" Header="Came Full" Binding="{Binding CameFull}"/>
                <DataGridTextColumn x:Name="CameIDColumn" Width="SizeToHeader" Header="Came ID" Binding="{Binding CameID}"/>
                <DataGridTextColumn x:Name="CameNameColumn" Width="SizeToHeader" Header="Came Name" Binding="{Binding CameName}"/>
                <DataGridTextColumn x:Name="CameNoColumn" Width="SizeToHeader" Header="Came No" Binding="{Binding CameNo}"/>
                <DataGridTextColumn x:Name="CameRAWColumn" Width="SizeToHeader" Header="Came RAW" Binding="{Binding CameRAW}"/>
            </DataGrid.Columns>
        </DataGrid>

    </Grid>
</Window>
code VB
Class MainWindow

    Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles MyBase.Loaded

        Dim CameraViewSource As System.Windows.Data.CollectionViewSource = CType(Me.FindResource("CameraViewSource"), System.Windows.Data.CollectionViewSource)
        'Load data by setting the CollectionViewSource.Source property:
        'CameraViewSource.Source = [generic data source]
    End Sub
End Class

こんな画面です。


でも、データが表示されませんね。


取得・追加・削除・編集 等のデータ操作は、別途、書いてあげなければいけません。
それは次回 VB EF6  Entity Framework お試し 3 データ操作 表示 で。



0 件のコメント:

コメントを投稿