5

実行時に新しいレコードを EntityCollection に追加し、DataGridView を新しい情報で更新しようとしています。

datagridview をエンティティ コレクション (つまり ObjectSet) に直接バインドし、同じコレクションにバインドされている BindingSource を介してバインドしようとしました。

DataGridView.Refresh()、DataGridView.EndEdit()、および BindSource.ResetBindings() などを試しましたが、何も機能していないようです。

4

3 に答える 3

0

私は同じ問題で立ち往生しています。Microsoft は自社のテクノロジを使用する人々に注意を払う必要があり、EF はデータ バインディングに注意を払う必要があります。ハイメ、もっと良い方法を見つけたら、このリストを更新してください。私にとっては、コンテキスト インスタンスの再作成は問題なく機能します。面白いことに、デバッガーはエンティティ コンテキストとバインディング ソースに最新の更新があることを示していますが、datagridview はまだ更新されていません。ありがとう

これが私がこれまでに見つけた最良の解決策です-

基本的にあなたがする必要があります

bindingSource.DataSource = EntityContext.Collection
                               .Execute(MergeOption.AppendOnly);
于 2011-01-29T19:23:22.740 に答える
0

手遅れではないことを願っています=)ここで機能するものがあります...

// Entity Data Model
private ManagerEntities context = new ManagerEntities();

// declare private member    
private BindingList<Currency> lstCurrencies = null;

// on form load, load data and bind to DataGridView's DataSource

private void Form1_Load(object sender, EventArgs e) {

     lstCurrencies = new BindingList<Currency>();

     ObjectResult or = ((ObjectQuery)currencies).Execute(MergeOption.AppendOnly);
     foreach (Currency c in or)
         lstCurrencies.Add(c);

     // dgMain is my DataGridView
     dgMain.DataSource = lstCurrencies;
}

// this will save objects that have changed. You might want to add logic for newly created and deleted objects.
private void btnSave_Click(object sender, EventArgs e) {
    context.SaveChanges();
}
于 2012-02-02T15:13:18.420 に答える
0

それを試してください:

bindingSource.DataSource = null;
bindingSource.DataSource = theCollection;

または、データのインメモリ コピーをBindingList<T>. DataGridView を BindingList にバインドし、エンティティを に追加するときに、エンティティもObjectSetに追加しBindingListます。

于 2011-01-23T17:26:07.227 に答える