1

これを正しく行っているかどうかさえわかりません。しかし基本的に、クラス/インターフェースから構築されたオブジェクトのリストがあります。そこから、リストをDataGridViewWindows フォーム (C#)にバインドしています。

ここでリストは、UI を自動更新する同期リストです。この場合はDataGridView.

すべてが正常に機能するようになりましたが、リストに動的オブジェクトが必要です。つまり、オブジェクトにはデフォルトで 2 つの静的プロパティ (ID、名前) があり、実行時にユーザーが残りのプロパティを選択します。これらは、データ グリッドにバインドする必要があります。リストの更新は、グリッドに自動的に反映されます。

動的オブジェクトを使用できることは承知していますが、ソリューションにアプローチする方法を知りたいです。

datagridview.DataSource = myData;  // myData is AutoUpdateList<IPersonInfo> 

現在IPersonInfoはオブジェクトのタイプです。実行時にこのタイプの動的プロパティを追加する必要があります。

public class AutoUpdateList<T> : BindingList<T>
{
    private ISynchronizeInvoke _SyncObject;
    private Action<ListChangedEventArgs> _FireEventAction;

    public AutoUpdateList()
        : this(null)
    {
    }

    public AutoUpdateList(ISynchronizeInvoke syncObject)
    {
        _SyncObject = syncObject;
        _FireEventAction = FireEvent;
    }

    protected override void OnListChanged(ListChangedEventArgs args)
    {
        try
        {
            if (_SyncObject == null)
            {
                FireEvent(args);
            }
            else
            {
                _SyncObject.Invoke(_FireEventAction, new object[] { args });
            }
        }
        catch (Exception)
        {
            // TODO: Log Here
        }
    }

    private void FireEvent(ListChangedEventArgs args)
    { 
        base.OnListChanged(args);             
    }
}

これについて手伝ってもらえますか?

4

1 に答える 1

1

プロパティを「シミュレートする」のが最善の方法だと思います。ITypedListを実装するのが最善の方法だと思います。すばらしい例は、ここにあります。

一度私は同様の問題に直面しました。私の場合、私はこのアプローチを採用しました。これはあなたに役立つかもしれません。

また、使用するプロパティの完全なセットを含む基本クラスを作成する方法があります(これは「動的」ではありません)。ただし、実行前にすべてのプロパティがない場合は機能しません。

于 2012-12-03T08:22:24.600 に答える