向数据绑定包装器添加搜索和排序功能



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

我可以想出两种方法来尝试。两者都要求创建一个从TableWrapper派生的新类。

1.第一个选项是简单地公开TableWrapper的Items属性(继承自BindingList<IRow>)。完成后,您可以使用System.Linq获取项目的排序版本,或者搜索项目。如果您需要监听ListChanged事件,这可能不适用于您的场景。

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

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

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/
    }
}

我希望这能帮助你开始。如果您搜索"override ApplySortCore c#",您应该会得到一些关于实现该方法的指导,因为它是标准的.NET

最新更新