エンティティ フレームワークを使用して、データをグリッドにプルしています。新しい項目を追加できるポップアップ フォームがあり、[OK] をクリックすると、それがデータベース コンテキストに追加されます。このような:
private void tsb_AddGroup_Click(object sender, EventArgs e)
{
var group = new PeriodicReportGroup();
frmGroups frm = new frmGroups(group);
if (DialogResult.OK == frm.ShowDialog())
{
Database.PeriodicReportGroups.Add(group);
}
InitGrid();
}
次に、ダイアログを閉じた後、グリッドを更新して、追加したばかりの新しい項目を表示します。ただし、コンテキストに追加したアイテムは、データベースの読み取りではなく、私によってインスタンス化されているため、コードをデバッグすると、データベース コンテキストにはそれが含まれていますが、他のすべてのアイテムとは異なるタイプであることがわかります。 : 追加したものはタイプです
{ReportData.PeriodicReportGroup}
他のものはタイプです
{System.Data.Entity.DynamicProxies.PeriodicReportGroup_3FCAD12B682C11C86AC1CF299E0617B21F74CC5F468C3577CE33B51A8CF38372}
そのため、Db コンテキスト エンティティをグリッドのデータ ソースに設定すると、新しいエンティティが途中で失われ、グリッドに表示されません。
Local
プロパティを使用して、これを回避する方法を見つけました。
gridGroups.DataSource = Database.PeriodicReportGroups.Local.ToList().Cast<IPeriodicReportGroup>().OrderBy(g => g.Name).ToList( );
これは、Db コンテキスト エンティティが以前に参照されている限り機能します。これにより、次のように、グリッドを初めてロードするときに機能させるために、いくつかのガベージ コードが必要になります。
if (Database.PeriodicReportGroups.Local.Count == 0)
{
var data = Database.PeriodicReportGroups.ToList();
}
これを行うためのより良い方法がないとは信じられません。誰でもいくつかのアイデアを提供できますか?ありがとう!