This question(及其答案)解釋了爲什麼您無法輕鬆地將DataGridView綁定到接口類型並獲取從基接口繼承的屬性的列。綁定到接口並顯示基接口中的屬性
建議的解決方案是實現一個自定義TypeConverter。我的嘗試如下。但是,創建綁定到ICamel的DataSource和DataGridView仍然只會導致一列(Humps)。我不認爲我的轉換器正被.NET用來決定它可以看到的ICamel的屬性。我究竟做錯了什麼?
[TypeConverter(typeof(MyConverter))]
public interface IAnimal
{
string Name { get; set; }
int Legs { get; set; }
}
[TypeConverter(typeof(MyConverter))]
public interface ICamel : IAnimal
{
int Humps { get; set; }
}
public class MyConverter : TypeConverter
{
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
{
if(value is Type && (Type)value == typeof(ICamel))
{
List<PropertyDescriptor> propertyDescriptors = new List<PropertyDescriptor>();
foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(typeof(ICamel)))
{
propertyDescriptors.Add(pd);
}
foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(typeof(IAnimal)))
{
propertyDescriptors.Add(pd);
}
return new PropertyDescriptorCollection(propertyDescriptors.ToArray());
}
return base.GetProperties(context, value, attributes);
}
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
{
return true;
}
}
您可能會發現有兩個其他的帖子很有趣:http://stackoverflow.com/questions/749542#750481和http://stackoverflow.com/questions/882214#882246 – 2009-06-26 11:55:28