1

这可能是一个非常简单的问题,但我无法弄清楚。我在表单的构造函数中有这么一小行代码:

 public FrmMain()
 {
    InitializeComponent();
    gdcSVN.DataSource = _presenter.GetAllFiles();
 }


 public List<IVersionedFile> GetAllFiles()
 {
    List<IVersionedFile> all = new List<IVersionedFile>();
    all.AddRange(_addedFiles);
    all.AddRange(_removedFiles);
    all.AddRange(_updatedFiles);
    return all;
 }

gdcSVN是一个 DevExpress GridControl。GetAllFiles返回 a List<IVersionedFile>,其定义如下:

public interface IUserFile
{
    string Name { get; }
    string Path { get; }
}

public interface IVersionedFile : IUserFile
{
    long Revision { get; }
    SvnStatus Status { get; }
}

class VersionedFile : IVersionedFile
{
    #region constructors
    protected VersionedFile(string name, string path, long revision, SvnStatus status)
    {
        Name = name;
        Path = path;
        Revision = revision;
        Status = status;
    }

    public VersionedFile(string name)
        : this(name, String.Empty, -1, SvnStatus.Zero)
    {}

    public VersionedFile(string name, string path)
        : this(name, path, -1, SvnStatus.Zero)
    {}

    public VersionedFile(string name, string path, long revision)
        : this(name, path, revision, SvnStatus.Zero)
    {}
    #endregion

    #region IVersionedFile members

    public string Name { get; set; }
    public string Path { get; set; }
    public long Revision { get; set; }
    public SvnStatus Status { get; set; }

    #endregion
}

当我运行表单时,我的 GridControl--RevisionStatus. 如何让网格显示从 IUserFile 接口继承的属性?

编辑澄清;我希望我的网格显示我的 2 个接口之间的所有 4 个属性。Name, Path,RevisionStatus. 目前,它仅显示来自 的最后两个IVersionedFile

4

1 回答 1

1

实际上我们通常class用于item type,interface不推荐使用。不知何故,底层基本接口的成员是不可发现的。我真的认为它应该以你想要的方式工作。我认为您必须通过以下代码稍微更改数据源:

gdcSVN.DataSource = _presenter.GetAllFiles().Cast<object>().ToList();

这意味着每当引用 中的元素时DataSource,如果需要,您必须知道它是IVersionedFile执行某些转换的类型,您还注意到底层类型是VersionedFile,IVersionedFile只是一个接口,通过它公开一些属性(不是全部)。

于 2013-11-04T18:27:17.470 回答