WPF を使用して大規模なデータベース アプリケーションに取り組んでいます。これまでのところ、Sql クラスへのリンクを使用して DataContext を作成し、それを ObservableCollection に格納して、DataGrid に DataContext としてフィードすることができました。
読み書きしようとしているSQLのメインテーブルは次のようになります
Work_Table
WorkID[pk int] | frn_CustomerID[fk int] | frn_UserID[fk int] | DateCreated[datetime] | etc...
Customers_Table
CustomerID[pk int] | CustomerName[varchar] | etc...
Users_Table
UserID[pk int] | UserName[varchar] | etc...
DataTemplates とインライン編集を使用して、DataGrid でこれらの列を表現したい
WorkID | CustomerName | UserName | DateCreated
これらすべての列と ID を含むプロキシ クラスを使用する必要がありますか? observablecollection を変更する必要がありますか、それともイベントに基づいてコード ビハインドですべてを処理する必要がありますか? 私は、データグリッドが基本的な CRUD を実行するという事実が気に入っています。これは、現時点で時間の制約があるため、実際には素晴らしいことです。
私はWPF、特にDataGridコントロールにかなり慣れていません。IValueConverters についても読んだことがありますが、これが正しい方法であるかどうか、またどのようなパフォーマンスの問題が発生する可能性があるかは正確にはわかりません。
誰かが私を正しい方向に向けることができれば、これまでのところ、私が見つけたすべての検索は、外部キーなどを使用しない単純なテーブルです.
更新
これまでにこのコードを見つけて、ある程度の進歩がありましたが、現在、問題は分類されています。
<toolkit:DataGridTemplateColumn Header="Customer Name">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Customers, Source={StaticResource MyDataContext}}" DisplayMemberPath="CustomerName" SelectedValuePath="Customer_ID" SelectedValue="{Binding Path=Customer_ID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>`
これにより、Customer_ID だけでなく「Customer Name」を表示できるようになりました。もちろん、基になるデータを整数として保持し、ユーザーが読み取り可能な説明を表示したいと考えています。今問題はソートです。これを非常にきれいに行う方法があるかどうか疑問に思っています。これは一般的なシナリオだと思いますが、解決策を見つけることに成功していません。間違った検索用語を探しているのかもしれません。
物事を単純化するために、これまでのところ私が持っているものは次のとおりです。
1.) Work_ID、Customer_ID、Employee_ID などを含む Work_Table というテーブルがあります。
2.) Customer_ID、CustomerName などを含む Customers_Table という別のルックアップ テーブルがあります。
3.) これらの列を DataGrid に表示する必要があります。 - Work_ID、CustomerName など...
私は DataGrid がバインドされている ObservableCollection を持っています。コンボボックスのアプローチを試す前は、Work_ID、Customer_ID、Employee_ID などを表示していました。基本的には、テーブル全体とその列です。
問題は、項目 3 を実行するための最良の方法は何ですか?) 必要な列のみを含むカスタム ObservableCollection に DataGrid をバインドする必要がありますか? IValueConverter は別の実行可能なソリューションなので、DataGrid が Customer_ID を表示しようとすると、代わりに CustomerName が表示されますか?
データベースを正規化するまで、この問題は発生しませんでした。