我有一个难以解释的问题。基本上我有一个我们可以称为MyObj的某个类的列表。此对象的一个属性是自定义列表本身。我想将此List绑定到dataGridView并使此特定属性也显示为列表。有任何想法吗?我清楚了吗? :-P ..
这是个主意。我有自己的自定义列表对象覆盖ToString()方法:
public class CategoriesList : List<Category>
{
public override string ToString()
{...}
}
这用作对象中的属性,例如:
public MyObj
{
public string Property1 {get; set; }
public string Property2 {get; set; }
public CategoriesList Categories {get; set; }
}
反过来,我有一个这些对象的列表,如:
List<MyObj> myDataSouce = SomeRepository.GetMyObjList();
我将其绑定到数据网格视图:
MyDataGridView.DataSource = myDataSource;
自动生成Property1和Property2。有没有办法添加CategoriesList属性?我以前认为在类上覆盖ToString()方法就足够了。
我真的迷失在这一个,因为我不知道如何谷歌为它:-P
答案 0 :(得分:3)
假设您想要在datagridview中显示特定值来代替列表,您将需要使用自定义TypeConverter。否则,您需要在datagridview列中放置一个支持列表的控件,例如下拉列表并绑定到该列表。
对于前者:
使用自定义typeconverter基本上装饰您的类别属性:
[TypeConverter(typeof(MyConverter))]
public CategoriesList Categories { get; set; }
然后使用自定义类型转换器,它基本上告诉datagrid在遇到categories属性时显示什么:
public class MyConverter : TypeConverter
{
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
if (value is CategoriesList) {
return value.ToString();
}
return base.ConvertFrom(context, culture, value);
}
}
您需要通过添加未绑定列手动将列添加为数据绑定,并为要映射到该列的属性指定DataPropertyName,在本例中为“Categories”
如果您想要显示二级属性,那么这可能会有所帮助: http://blogs.msdn.com/b/msdnts/archive/2007/01/19/how-to-bind-a-datagridview-column-to-a-second-level-property-of-a-data-source.aspx
答案 1 :(得分:0)