2011-01-01 9 views
2

私は、SQL CE、WPF、Entity Framework 3.5sp2およびiamを使用してPOSアプリケーションを開発しており、ユーザーが注文を入力するためのオーダーエントリコントロールとしてデータグリッドを使用しようとしています。 これをenitiy frmaeワークモデルにバインドするにはどうすればいいですか?abdは2通りの方法を探していますか?Entity FrameworkとWPF DataGridとの双方向データバインディングは可能ですか?

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     using (MasterEntities nwEntities = new MasterEntities()) 
     { 
      var users = from d in nwEntities.Companies 
     select new CompanyRowModel{ CompanyId = d.CompanyId, CompanyName  d.CompanyName, Place = d.Place } 

       listBox1.DataContext = users; 
       dataGrid1.DataContext = users; 
     }   
     } 

     public class CompanyRowModel 
     { 
     public int CompanyId { get; set; } 
     public string CompanyName { get; set; } 
     public string Place{ get; set; } 
     } 

と私のXAMLのコードを編集この

<Grid> 
    <ListBox Name="listBox1" ItemsSource="{Binding}" /> 
    <Button Content="Show " Name="button1" Click="button1_Click" /> 

    <DataGrid AutoGenerateColumns="False" Name="dataGrid1" ItemsSource="{Binding}" > 
     <DataGrid.Columns> 
      <DataGridTextColumn Header=" ID"  Binding="{Binding CompanyId}"/> 
      <DataGridTextColumn Header="Company Name" Binding="{Binding CompanyName}"/> 
      <DataGridTextColumn Header="Place" Binding="{Binding Place}" /> 
     </DataGrid.Columns> 
    </DataGrid> 
    <Button Content="Save" Name="button2" VerticalAlignment="Bottom" Click="button2_Click" /> 
</Grid> 

のようになります:

私は@vorrtexで示す変更を行った、しかし、その後、私はchagesを保存するために別のボタンを追加し、ボタンでイベントをクリックしてコードを追加しましたが、エラーが表示されます。

private void button2_Click(object sender, RoutedEventArgs e) 
    { 
     nwEntities.SaveChanges(); 
    } 
+0

また、別の方法があります。「var users = nwEntities.Companies.ToList()」と書いてください。しかし、テーブルに大きなサイズのフィールドがある場合、この解決方法はパフォーマンスの問題を引き起こします。 – vorrtex

答えて

1

はい、可能です。


OK、あなたの編集後の(S)

これで、新しい、アドホッククラスCompanyDataRowModelで選択されたプロパティ値を格納しています。

これは、追跡対象のクラスではありません。自分の自己追跡エンティティクラスを作成するか、Companyクラスを使用します。

+0

しかし、そうしている間にエラーが発生しました。助けてください。変更された質問を参照してください。 – Panindra

+0

私の具体的な事例を更新しました。 – Panindra

1

あなたは、このコードに問題があります。この匿名クラスで

select new { d.CompanyId, d.CompanyName, d.Place } 

プロパティは読み取り専用されているので、あなたは、これらのプロパティを持つ実際のクラスを作成する必要があります。

public class CompanyRowModel 
{ 
    public int CompanyId { get; set; } 
    //... 
} 
//... 
var users = from d in nwEntities.Companies 
      select new CompanyRowModel{ CompanyId = d.CompanyId, CompanyName = d.CompanyName, Place = d.Place } 
+0

エンティティを保存したときに表示されたコーディングが変更され、新しいエラーが発生しました。 – Panindra

+0

エンティティではなくCLRオブジェクトに変更を加えました。オブジェクトコレクションとエンティティコレクションを同期させます。たとえば、イベントRowEditEndingを使用して、CompanyRowModelオブジェクトの値をnwEntities.Companies内の関連エンティティにコピーします。これらはIDで関連付けられているため、この列はDataGridで読み取り専用です。 – vorrtex

0

あなたはWPF Application Framework (WAF)BookLibraryサンプルアプリケーションに興味があるかもしれません。 Entity FrameworkはDBとしてSQL CEでも使用され、WPF DataGridが含まれています。

関連する問題