3

我正在使用ITable 对象 (ESRI ArcObject Table) 的 C# 包装器,但此包装器缺少排序和搜索功能。有没有办法添加这些功能?我怎么能做到?

4

1 回答 1

3

我可以想出两种方法来尝试这个。两者都要求您创建一个派生自TableWrapper.

1.第一种选择是简单地暴露ItemsTableWrapper的属性(继承自BindingList<IRow>)。完成此操作后,您可以使用System.Linq来获取项目的排序版本,或搜索项目。如果您需要侦听 ListChanged 事件,这可能不适用于您的方案。

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

2.更长的路线是BindingList<T>通过创建一个类来提供更完整的实现,该类继承TableWrapper并实现了中缺少的继承方法TableWrapper

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 回答