0

SQL Expressとの通信にEFを使用してC#.NetWindowsアプリケーションを作成しています。アプリケーションに連絡先テーブルがあります。連絡先を編集するために、ShowDialogue()メソッドで新しいWindowsフォームを呼び出し、ApplyCurrentValueメソッドを使用しました。このフォームでは、連絡先のリストを取得すると(db.Contacts.ToList()メソッドを使用)、変更を確認できますが、フォームを閉じてメインフォームに存在するグリッドビューを更新すると、表示されません。アプリケーション全体を再起動しない限り、変更されます。

新しいフォームを表示するためのコードは次のとおりです。

NewContactForm contact = new NewContactForm();
        contact.TopLevel = true;
        contact.ShowInTaskbar = false;
        contact.ShowDialog();
        RefreshForm();
        FillGridView();

contactToEditオブジェクトのプロパティを変更しましたが、変更を保存したいと思います。それで:

public void UpdateContact(Contact contactToEdit)
    {
        db.Contacts.ApplyCurrentValues(contactToEdit);
        db.SaveChanges();
    }

ここで、FillGridView()にあるこのコードを使用して連絡先のリストを表示したいと思います。

db.Contacts.ToList();

私はいくつかのコードが欠けていますか?私もdb.AcceptAllChanges()を使用しましたが、役に立たない

4

2 に答える 2

0

これがあなたが試してみたいと思うかもしれないいくつかのコードです。

db.Contacts.Single(Contact => Contact.ContactID == <lets say, 5>).Name = "Pete";
db.Contacts.Single(Contact => Contact.ContactID == <lets say, 5>).Surname = "Repeat";

db.SaveChanges();

これは、EntityFrameworkを使用してデータベースのレコードを更新するために使用する方法です。これが役立つかどうかを確認してください。toList()メソッドを使用するか、連絡先モデルを照会してテストできます

var contactquery = (from x in db.Contacts where x.ContactID == <lets say, 5> select new {contactName = x.Name});

List<string> contactNames = new List();

foreach (var name in contactquery)
{
     contactNames.Add(name.contactName);
}

update これは単なる説明の更新です。私が言うところの、それはSingle()メソッドで述べられたフィールドを表す任意の値である可能性があります。single()が行うことは、ラムダ式によって決定されたクエリから最初のレコードのみを抽出することです。

アップデート2 は私のコードのエラーを修正しました。あなたのを修正してください

于 2012-05-15T10:41:17.520 に答える
0

わかりました..それは私のために働いた解決策です

メインフォーム(親スコープ)では、次の単純なコードを使用して、変更されたオブジェクトを更新しました。

db.Refresh(System.Data.Objects.RefreshMode.StoreWins, contactToEdit)

そして、すべてがその後もうまく機能します!

于 2012-05-16T04:43:14.293 に答える