我有一个很难解释的问题。本质上,我有一个我们可以称为 MyObj 的特定类的列表。该对象的属性之一是自定义列表本身。我想将此 List 绑定(bind)到 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();
我将它绑定(bind)到数据 GridView 的地方:
MyDataGridView.DataSource = myDataSource;
Property1 和 Property2 是自动生成的。有什么办法也可以添加 CategoriesList 属性吗?我以前认为重写类上的 ToString() 方法就足够了..
我真的迷失在这个问题上,因为我什至不知道如何用谷歌搜索它:-P
最佳答案
假设您想要在数据 GridView 中显示一个特定的值来代替列表,您将需要使用自定义类型转换器。否则,您需要在支持列表的 datagridview 列中放置一个控件,例如下拉列表并绑定(bind)到它。
对于前者:
基本上用自定义类型转换器装饰您的类别属性:
[TypeConverter(typeof(MyConverter))]
public CategoriesList Categories { get; set; }
然后使用一个自定义类型转换器,基本上告诉数据网格当它遇到类别属性时显示什么:
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);
}
}
您需要通过添加一个未绑定(bind)的列来手动添加要进行数据绑定(bind)的列,并为要映射到该列的属性指定 DataPropertyName,在本例中为“类别”
如果您也希望显示二级属性,那么这可能会有所帮助: 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
关于c# - 将自定义列表属性绑定(bind)到 DatagridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5579170/