我的DevExpress xtragrid中的列之一不是排序,分组或过滤。对类似问题的答案表明我需要实现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上询问...

最佳答案

消失的内容是一个无关紧要的问题-红鲱鱼。一旦实现了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);
}


源自MSDN文档中的IComparable.CompareTo Method

关于c# - IComparable对列进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14517409/

10-11 16:19