将自定义列表属性绑定到DatagridView

时间:2011-04-07 09:52:08

标签: c# winforms list datagridview

我有一个难以解释的问题。基本上我有一个我们可以称为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

2 个答案:

答案 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)

This可能有帮助......看看我的答案,我还没有尝试使用属性也是一种列表,但我认为这个想法是一样的。

或者this一个,我也有一个示例代码的答案......