如何使 GridView 显示其数据源的父类字段



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

 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返回一个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 中只有 2 列 - RevisionStatus 。如何让网格显示从 IUserFile 接口继承的属性?

编辑以澄清;我希望我的网格显示我的 4 个接口之间的所有 2 个属性。 NamePathRevisionStatus。目前,它仅显示IVersionedFile中的最后两个。

事实上,我们通常使用class作为项目类型,不建议使用interface。不知何故,无法发现基础基接口的成员。我真的认为它应该以您想要的方式工作。我认为您必须通过以下代码稍微更改数据源:

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

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

最新更新