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

时间:2013-11-04 17:46:32

标签: c# winforms interface .net-3.5

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

 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接口的继承属性?

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

1 个答案:

答案 0 :(得分:1)

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

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

这意味着每当引用DataSource中的元素时,您必须知道它是IVersionedFile类型才能执行某些转换,如果需要,还要注意基础类型为{{1} },VersionedFile只是一个接口,通过它可以暴露一些属性(不是全部)。