2013-11-04 60 views
1

這可能是一個非常簡單的問題,但我無法弄清楚。我的代碼在我的窗體構造函數這個小行:如何讓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 
} 

當運行的形式,我只有2列在我GridControl-- RevisionStatus和。如何讓網格顯示IUserFile接口的繼承屬性?

編輯澄清;我想讓我的網格顯示我的2個接口之間的所有4個屬性。 Name,Path,RevisionStatus。目前,它只顯示IVersionedFile的最後兩個。

+0

我不確定,但我認爲你應該通過你的類中的公共屬性獲取器公開繼承的屬性。例如,如果你有一個類型爲字符串和名字爲FirstName的繼承屬性,你應該添加公共字符串FirstName {get {return this.FirstName;}} – Christos

+0

@Christos我不確定你的意思。是不是我在IVersionedFile成員區域內的第二段代碼'段落'底部正在做什麼? – sab669

+0

@ sab669實際的問題是什麼?你想在你的網格中顯示哪些字段/屬性? –

回答

1

實際上,我們通常使用class作爲物品類型,不推薦使用interface。不知何故底層基礎接口的成員是不可發現的。我真的認爲它應該以你想要的方式工作。我覺得你有這個代碼,以更改數據源一點點:

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

這意味着只要在DataSource引用的元素,你要知道,這是IVersionedFile類型來執行一些鑄造,如果你願意,你也請注意,基礎類型是VersionedFile,IVersionedFile只是一個通過其暴露某些屬性(並非全部)的接口。

+1

將它投射到'VersionedFile'而不是'IVersionedFile'工作,謝謝! – sab669

相關問題