3

ITable オブジェクト (ESRI ArcObject Table)の C# ラッパーを使用していますが、このラッパーには並べ替え機能と検索機能がありません。これらの機能を追加する方法はありますか? どうすればできますか?

4

1 に答える 1

3

これを試みるには 2 つの方法が考えられます。どちらも、 から派生した新しいクラスを作成する必要がありますTableWrapper

1.最初のオプションはItems、TableWrapper (から継承BindingList<IRow>) のプロパティを単純に公開することです。それが完了したら、 を使用System.Linqして、アイテムのソートされたバージョンを取得したり、アイテムを検索したりできます。ListChanged イベントをリッスンする必要がある場合、これはシナリオでは機能しない可能性があります。

public class GeoGeekTable : TableWrapper 
{
    public IList<IRow> GetTableItems()
    {
        return this.Items;
    } 
}

2.より長いルートは、から継承し、 に欠けている継承されたメソッドを実装BindingList<T>するクラスを作成することにより、 のより完全な実装を提供することです。TableWrapperTableWrapper

BindingList<T>これらのメソッドを定義します:

ApplySortCore : 派生クラスでオーバーライドされた場合、項目を並べ替えます。それ以外の場合は、NotSupportedException をスローします。

FindCore : 検索が派生クラスで実装されている場合、指定された値を持つ指定されたプロパティ記述子を持つアイテムのインデックスを検索します。それ以外の場合は、NotSupportedException。

http://msdn.microsoft.com/en-us/library/ms132690.aspx

public class GeoGeekTable : TableWrapper
{
    protected override void ApplySortCore(PropertyDescriptor prop, ListSortDirection direction)
    {
        // see http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/22693b0e-8637-4734-973e-abbc72065969/
    }
}

始めるのに役立つことを願っています。「ApplySortCore c# のオーバーライド」を検索すると、標準の .NET であるため、そのメソッドの実装に関するガイダンスが得られるはずです。

于 2012-07-25T17:06:01.067 に答える