これは私の最初の WPF アプリケーションです。助けが必要です。EF を使用してデータベースにバインドされたデータグリッドを含む WPF ウィンドウを作成しました。CollectionViewSource
データ ソース ウィンドウからテーブルをウィンドウにドラッグ アンド ドロップすると、MDI が自動的にコードを生成します。
ObjectQuery<ITPORTAL.HRMS_IT_ASSET_MASTER> ass = gRACHRMSEntities.HRMS_IT_ASSET_MASTER;
そして、次のように CollectionViewSource.Source に割り当てられたオブジェクト クエリ
hRMS_IT_ASSET_MASTERQuery = Load_Asset_Master_Data(gRACHRMSEntities.HRMS_IT_ASSET_MASTER);
hRMS_IT_ASSET_MASTERViewSource.Source = hRMS_IT_ASSET_MASTERQuery.Execute(System.Data.Objects.MergeOption.AppendOnly);
しかし、このコードはフィルタリング機能をサポートしていないため、このようなものを追加しました
private ObservableCollection<ITPORTAL.HRMS_IT_ASSET_MASTER> Load_Asset_Master_Data(System.Data.Objects.ObjectQuery<ITPORTAL.HRMS_IT_ASSET_MASTER> objectSet)
{
ObservableCollection<ITPORTAL.HRMS_IT_ASSET_MASTER> oc = null;
try
{
var value = from Asset_Master in objectSet
where Asset_Master.IT_ASSET_IS_ACTIVE == "1" && Asset_Master.IT_ASSET_IS_SCRAPED == "0" && Asset_Master.IT_ASSET_IS_SCRAP_FINAL == "0"
select Asset_Master;
oc = new ObservableCollection<HRMS_IT_ASSET_MASTER>(value.ToList());
}
catch (Exception err)
{
MessageBox.Show(err.Message, "IT Portal Error", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
}
return oc;
}
そして、次のように CollectionViewSource に割り当てられます
hRMS_IT_ASSET_MASTERViewSource.Source = Load_Asset_Master_Data(gRACHRMSEntities.HRMS_IT_ASSET_MASTER);
このようにしてフィルタリングを行うことができますが、データグリッドの最後の行を埋めて保存を押すと、保存コマンドが追加された行を考慮しないため、1 つの機能を失いました。ここでの編集アクションに対する保存コマンドの応答はイベントハンドラを保存
private void btnSave_Click(object sender, RoutedEventArgs e)
{
try
{
if (gRACHRMSEntities.SaveChanges() > 0)
{
txtblkStatus.Text = "Changes has been saved.";
}
}
catch (Exception err)
{
MessageBox.Show(err.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
} }
私はオンラインでチェックしたところ、を使用する場合、TObservableCollection<T>
の独自の実装を提供する必要があることがわかりました.IEditableObject