0

エンティティのリストを表示するウィンドウがあり、新しいウィンドウ (グリッドではない) で gridview の選択項目を編集したい。フォームを送信してもエラーは発生しませんでしたが、エンティティはデータベースに変更がありません! 私を助けてください。

私のリストウィンドウのコードビハインドの一番上に:

            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();
            }

上記のコードはすべて、最初のウィンドウ (エンティティのリストを表示するウィンドウ) にあります。そして私の2番目のウィンドウ(最初のウィンドウの選択されたアイテムを編集するためのウィンドウ)で:

submitbutton クリック イベント:

        DialogResult = true;
        Close();

私の問題は次のとおりです。編集フォームを送信してもエラーは発生しませんでしたが、データがデータベースに保存されず、編集フォームをキャンセルすると次のエラーが発生します。

InvalidOperationException は処理されませんでした: CancelEdit は現在の編集項目ではサポートされていません。

4

3 に答える 3

1

View.EditItem、View.CommitEdit、View.CancelEdit を使用する理由 必要なのは win.DataContext = SelectedEmployee だけです。私が得られないのは、新しい編集データをエンティティに設定したときですか?

using (ArchiveEntities db = new ArchiveEntities())
{
    Employee employee = db.Employees.Single(x => x.Id == SelectedEmployee.Id);
    db.Employees.ApplyCurrentValues(employee);
    db.SaveChanges();
    View.CommitEdit();
 }

データベースから従業員を取得しますが、SelectedEmployee から編集したデータを従業員に適用しません。または私は何かが恋しいですか?

SelectedEmployee はあなたのデータベースのエンティティです

data = db.Employees.Include("Department");
this.AllEmployeesData = new ObservableCollection<Employee>(data);

では、なぜそれを使用してデータベースに保存しないのですか?

db.SaveChanges(SelectedEmployee );
于 2011-12-14T10:29:34.357 に答える