如果成員被保存在基類類型列表中,是否有任何方法讓DataGridView
顯示派生類的屬性,其中屬性不存在?說我有以下幾點:使用DataGridView在使用基類對象列表時顯示派生類對象的屬性
public class MyBaseClass
{
public int MyPropertyBase { get; set; }
//...
}
public class MyDerivedClass : MyBaseClass
{
public int MyPropertyDerived { get; set; }
//...
}
// Create list of type MyBaseClass, holding MyDerivedClass objects
List<MyBaseClass> list = new List<MyBaseClass>();
list.Add(new MyDerivedClass(1));
list.Add(new MyDerivedClass(2));
list.Add(new MyDerivedClass(3));
// Declare DataGridView
DataGridView dataGridView = new DataGridView();
dataGridView.AutoGenerateColumns = false;
// Create display column for DataGridView
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
當我綁定列表到DataGridView
並顯示MyPropertyBase
物業正常工作:
// Select MyPropertyBase to display in column
col.DataPropertyName = "MyPropertyBase";
dataGridView.Columns.Add(col);
dataGridView.DataSource = list;
然而,如果不是我想用同樣的展現MyPropertyDerived
List<MyBaseClass>
它不會工作,只顯示空單元格(雖然它顯示與我的列表中的項目對應的單元格的數量):
// Select MyPropertyDerived to display in column
col.DataPropertyName = "MyPropertyDerived";
dataGridView.Columns.Add(col);
dataGridView.DataSource = list;
我真的需要將這個列表保存到我的抽象基類中,因爲它在遍佈整個代碼的其他地方使用。是否有任何方法可以將派生類的屬性暴露給DataGridView
(如果它們存在,只顯示並清空單元格,如果該屬性不存在?真正有用的是讓每個派生類在綁定到DataGridView
時顯示他們希望顯示的所有內容(通過屬性),並從列表中僅填入DataGridView
。
這是我認爲我堅持的解決方案。目前,我將嘗試將所有內容都轉換爲具有我想要的所有屬性的匿名類型。 –
與此我你是否有權訪問派生的任何屬性,如果你的派生類也作爲一個名爲foo datapropertyname中的屬性,你可以放置字符串foo,它會顯示它的值。 – terrybozzio