这可能是一个非常简单的问题,但我无法弄清楚。我的窗体构造函数中有一小行代码:
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 列 - Revision
和 Status
。如何让网格显示从 IUserFile 接口继承的属性?
编辑以澄清;我希望我的网格显示我的 4 个接口之间的所有 2 个属性。 Name
、Path
、Revision
和Status
。目前,它仅显示IVersionedFile
中的最后两个。
事实上,我们通常使用class
作为项目类型,不建议使用interface
。不知何故,无法发现基础基接口的成员。我真的认为它应该以您想要的方式工作。我认为您必须通过以下代码稍微更改数据源:
gdcSVN.DataSource = _presenter.GetAllFiles().Cast<object>().ToList();
这意味着每当引用DataSource
中的元素时,您必须知道它属于IVersionedFile
类型,如果需要,可以执行一些强制转换,您还注意到底层类型是VersionedFile
,IVersionedFile
只是一个接口,通过它公开一些属性(不是全部)。