エンティティのリストを表示するウィンドウがあり、新しいウィンドウ(グリッドではありません)でgridviewのselecteitemを編集したいと思います。フォームを送信してもエラーは発生しませんでしたが、エンティティはデータベースに変更がありません!私を助けてください。wpfの新しいウィンドウでエンティティを編集します
private ObservableCollection<Employee> AllEmployeesData { get; set; }
private ListCollectionView View;
とwindow_loadedに私がデータをフェッチするため、このメソッドを使用します:後ろの私のリストウィンドウのコードの先頭で
public void LoadAllEmployees()
{
IEnumerable<Employee> data = null;
using (ArchiveEntities db = new ArchiveEntities())
{
data = db.Employees.Include("Department");
this.AllEmployeesData = new ObservableCollection<Employee>(data);
}
CollectionViewSource employeeSource = (CollectionViewSource)this.FindResource("AllEmployeesDataSource");
employeeSource.Source = this.AllEmployeesData;
this.View = (ListCollectionView)employeeSource.View;
}
Editbuttonイベントをクリックします。
EditEmployeeView win = new EditEmployeeView();
View.EditItem(SelectedEmployee);
win.DataContext = SelectedEmployee;
if ((bool)win.ShowDialog())
{
using (ArchiveEntities db = new ArchiveEntities())
{
Employee employee = db.Employees.Single(x => x.Id == SelectedEmployee.Id);
db.Employees.ApplyCurrentValues(employee);
db.SaveChanges();
View.CommitEdit();
}
}
else
{
View.CancelEdit();
}
すべて上記のコードの最初のウィンドウ(エンティティのリストを表示するウィンドウ)にあります。 と私の第二のウィンドウで(最初のウィンドウの編集選択した項目のウィンドウ):
サブミットボタンのクリックイベント:
DialogResult = true;
Close();
私の問題がある:私は編集フォームを送信するとエラーは発生していませんが、データがでセーブいけません私が編集フォームをキャンセルすると、データベースと、私はこのエラーを取得:
InvalidOperationException was unhandled: CancelEdit is not supported for the current edit item.
こんにちは、私は別のウィンドウ(Seprateウィンドウ)で選択したアイテムを編集したいと思います。同じウィンドウ(グリッド内)にエンティティを保存する場合は、あなたの方法は真です。 –
よく私は私のアプリでそれを使用して、私は2番目のビューのDataContextとしてSelectedItemを取る - それを変更し、SelectedItems /変更をdbに保存して保存します。 – blindmeis
btwアプリケーションをデバッグする場合は、EditEmployeeViewで行ったすべての変更が反映されているはずです。 "if((bool)win.ShowDialog())"の後にブレークポイントを設定すると、SelectedItemはすべての変更を保持するはずです – blindmeis