1

エンティティ フレームワークを使用して、データをグリッドにプルしています。新しい項目を追加できるポップアップ フォームがあり、[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();
        }

これを行うためのより良い方法がないとは信じられません。誰でもいくつかのアイデアを提供できますか?ありがとう!

4

0 に答える 0