如何在Winforms中将对象集合绑定到DataGridView



如果我有两个对象,即Fruit' and Color`,它们的定义如下:

public class Fruit  
{  
  public int FruitId { get; set; }  
  public string Name { get; set; }  
  public Color Color { get; set; }  
}  
public class Color  
{  
  public int ColorId { get; set; }  
  public string Name { get; set; }  
}  

如何将Fruit(e.g. List<Fruit>)的集合绑定到DataGridView?其中得到的输出将类似于以下内容:

+-----+--------+----------+  
| Id  | Name   | Color    |  
+-----+--------+----------+  
| 10  | Apple  | Red      |  
| 20  | Orange | Orange   |  
| 30  | Grapes | Violet   |  
+-----+--------+----------+  

与下面的输出不同:(注意:N.Color中的N表示对象Color的名称空间)

+-----+--------+------------+  
| Id  | Name   | Color      |  
+-----+--------+------------+  
| 10  | Apple  | N.Color    |  
| 20  | Orange | N.Color    |  
| 30  | Grapes | N.Color    |  
+-----+--------+------------+  

更新#1:
我在SO上找到了一个类似的帖子,并尝试了该帖子上的一些建议,但它不起作用。。。

您有多个选项。

您可以在Color类中重写ToString方法以返回Name,如:

public class Color
{
    public int ColorId { get; set; }
    public string Name { get; set; }
    public override string ToString()
    {
        return Name;
    }
}  

或者,您可以选择一个匿名对象列表,并在结果中选择ColorName,而不是将List<Fruit>指定为DataSource,如:

var result = yourListOfFruit
                .Select(r => new
                        {
                            FruitID = r.FruitId, 
                            Name = r.Name, 
                            Color = r.Color.Name,
                        }).ToList();
dataGridView1.DataSource = result;

好吧,在弄清楚如何让我的应用程序工作几天后,我设法找到了一些文章,这些文章对我解决问题有很大帮助。我想我会在SO上为你们分享,所以让我们开始吧:

首先,假设我们已经有一个水果列表存储在一个变量水果中,并且假设我们已经从一个方法中得到了它的值:

List<Fruit> fruits = method();  

现在,我的问题是。。。如果我使用以下命令将该列表绑定到数据网格视图:

datagridview.DataSource = fruits;  

它会给我一个类似于以下的结果:

+-----+--------+------------+  
| Id  | Name   | Color      |  
+-----+--------+------------+  
| 10  | Apple  | N.Color    |  
| 20  | Orange | N.Color    |  
| 30  | Grapes | N.Color    |  
+-----+--------+------------+   

这不是我想要的。所以我想,如果我以某种方式手动将每一列放在datagridview中,我可以指定要显示水果列表中的哪些属性。所以我做了这样的事情:

DataGridViewColumn col3 = new DataGridViewTextBoxColumn();  
col3.DataPropertyName = "Color.Name";  
col3.HeaderText = "Color Name";  
dataGridView1.Columns.Add(col3);  

但是,在DataGridView列的DataPropertyName上指定类似Color.Name的内容是不起作用的,只会导致DataGridView上没有显示任何数据的空白列。为了让它工作,DataGridView应该有一个单元格格式函数,以便在给定的列中正确显示它的值。有关如何进行格式化的完整教程,您可以从Antonio Bello的博客中查看。

就是这样,希望它也能帮助你^_^

您可以检查此属性DataGridView.DataSource属性

        // Automatically generate the DataGridView columns.
        dataGridView1.AutoGenerateColumns = true;
        // Set up the data source.
        bindingSource1.DataSource = GetData("Select * From Products");

相关内容

  • 没有找到相关文章

最新更新