c# - 将自定义列表属性绑定(bind)到 DatagridView

标签 c# winforms list datagridview

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

相关文章:

c# - 字典列表中的唯一字典(c#)

python - 如何替换 txt 文件中已存在的数据 --python

python - 将嵌套列表中的每个元素乘以 2

c# - 在插入数据库时​​将空字符串设置为 null

c# - 哪个 passwordchar 在 winforms 文本框中显示黑点 (•)?

c# - ProgressBar 在具有相同代码的不同机器上看起来不同

c# - 如何在 System.Windows.Forms.WebBrowser 中判断加载的页面是错误页面还是有效页面?

c# - 如何在不停止的情况下在另一个异步方法中创建调用异步方法

c# - 如何统一平滑地旋转相机?

c# - 使用 C++ 中的 COM 对象,在 C#.NET 中返回对象 []