2

DevExpress xtragrid の列の 1 つで、並べ替え、グループ化、またはフィルタリングが行われていません。同様の質問への回答は、IComparable を実装する必要があることを示唆していますが、実装すると列にまったく表示されなくなりました。

public class Flow : System.IComparable<Flow>
{
  public Flow(int id, string name, string description)
  {
    this.ID = id;
    this.Name = name;
    this.Description = description;
  }

  public int ID { get; private set; }

  public string Name { get; private set; }

  public string Description { get; private set; }

  public override string ToString()
  {
    return Name;
  }

  public override bool Equals(object obj)
  {
    Flow flow = obj as Flow;
    if (flow == null) return false;
    return this.ID == flow.ID;
  }

  public static bool operator ==(Flow flow1, Flow flow2)
  {
    if (object.ReferenceEquals(null, flow1))
      return object.ReferenceEquals(null, flow2);
    return flow1.Equals(flow2);
  }

  public static bool operator !=(Flow flow1, Flow flow2)
  {
    return !(flow1 == flow2);
  }

  public override int GetHashCode()
  {
    return ID;
  }

  public int CompareTo(Flow other)
  {
    return this.Name.CompareTo(other.Name);
  }
}

私は何を間違えましたか?

アップデート:

DevExpressで尋ねた...

4

2 に答える 2

2

消えたコンテンツは無関係な問題でした。列IComparableではなく、実装すると並べ替えが可能になりましたIComparable<Flow>

public int CompareTo(object obj)
{
  if (object.ReferenceEquals(null, obj))
    return 1;
  Flow flow = obj as Flow;
  if (flow == null)
    throw new ArgumentException("Object is not of type Flow");
  return this.Name.CompareTo(flow.Name);
}

Methodの MSDN ドキュメントから引用IComparable.CompareTo

于 2013-01-25T09:21:52.847 に答える
0

CompareTo メソッドが間違っているようです。以下を CompareTo() メソッドに追加してみて、機能するかどうかを確認してください。

    public int CompareTo(Flow other)
    {
      // Alphabetic sort if name is equal.
      if this.Name == other.Name
      {
        return this.Name.CompareTo(other.Name);
      }
     //Default sort.
     return other.Name.CompareTo(this.Name);
    }

問題が解決したかどうかをお知らせください。

于 2013-01-25T08:32:54.380 に答える