0

投稿で答えを使用しようとしています: EntitySet<T>を並べ替えてインターフェイスを公開し、バインディング リストで EntitySet を並べ替えるにはどうすればよいですか。以下のクラスを作成しましたが、次のコンパイラ エラーが発生しました。以下のメソッドをコンパイルするためにインクルードする必要がありますか? 私はデリゲートとラムバ式に非常に慣れていません。

また、EntitySet から BindingList を作成すると、BindingList に加えた変更が EntitySet にも適用されることを誰かが確認できますか?

基本的に、並べ替えて変更する必要がある EntitySet があります。次に、BindingList の元となった元のエンティティを使用して、これらの変更を永続化する必要があります。

public class EntitySetBindingWrapper<T> : BindingList<T>
{
    public EntitySetBindingWrapper(BindingList<T> root)
        : base(root)
    {
    }

            public void Sort<P>(Expression<Func<T, P>> expr, ListSortDirection direction)
    {
        if (expr == null)
            base.RemoveSortCore();

        MemberExpression propExpr = expr as MemberExpression;
        if (propExpr == null) throw new ArgumentException("You must provide a property", "expr");

        PropertyDescriptorCollection descriptorCol = TypeDescriptor.GetProperties(typeof(T));
        IEnumerable<PropertyDescriptor> descriptors = descriptorCol.Cast<PropertyDescriptor>();
        PropertyDescriptor descriptor = descriptors.First(pd => pd.Name == propExpr.Member.Name);

        base.ApplySortCore(descriptor, direction);
    }
}

ようやく上記のコードをコンパイルできるようになりましたが、コンストラクターを呼び出そうとするとエラーが発生します。

currentPredefinedJob.fkItems が EntitySet である次のコードは、エラーになります: System.ComponentModel.IBindingList から System.ComponentModel.BindingList に変換できません。

var bindingWrapper = new EntitySetBindingWrapper<PredefinedJobsItem>(currentPredefinedJob.fkItems.GetNewBindingList());

また、次のコードはエラーになります: エラー 8 汎用型 'MarineService.Tests.EntitySetBindingWrapper' を使用するには、'1' 型引数が必要です

var bindingWrapper = new EntitySetBindingWrapper(currentPredefinedJob.fkItems.GetNewBindingList());

このコンストラクターを呼び出す方法と、結果の BindingList をどのように並べ替えるかを確認する方法を教えてもらえますか?

4

2 に答える 2

1

クラス定義またはメソッド定義のいずれかでジェネリック変数を指定する必要があります。

P関数によって返されるタイプになりますexpr

public void Sort<P>(Expression<Func<T, P>> expr, ListSortDirection direction)
于 2012-08-31T15:37:24.083 に答える
0

コンストラクターを呼び出すには、次のようにするとうまくいきます。

var w = new EntitySetBindingWrapper<String>(new System.ComponentModel.BindingList<string>());

内部で行っていることに問題が発生している可能性はありcurrentPredefinedJob.fkItems.GetNewBindingList()ますか?

于 2012-08-31T18:07:40.563 に答える