如果我有两个对象,即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表示对象颜色的命名空间)
+-----+--------+------------+
| Id | Name | Color |
+-----+--------+------------+
| 10 | Apple | N.Color |
| 20 | Orange | N.Color |
| 30 | Grapes | N.Color |
+-----+--------+------------+
更新#1:
我在SO上发现了一篇类似的帖子here,并在该帖子上尝试了一些建议,但它没有用...
答案 0 :(得分:3)
您有多种选择。
您可以在ToString
课程中覆盖Color
方法,以便返回Name
,如:
public class Color
{
public int ColorId { get; set; }
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
或者,不是将List<Fruit>
指定为DataSource
,您可以选择匿名对象列表,并在结果中选择Name
Color
,如:
var result = yourListOfFruit
.Select(r => new
{
FruitID = r.FruitId,
Name = r.Name,
Color = r.Color.Name,
}).ToList();
dataGridView1.DataSource = result;
答案 1 :(得分:3)
好的,经过几天弄清楚如何使我的应用程序工作,我设法找到一些帮助我解决问题的文章。我以为我会在这里分享给你们,所以让我们开始吧:
首先,假设我们已经有一个存储在变量水果中的水果列表,并假设我们已经从方法中获得了它的值:
List<Fruit> fruits = method();
现在,我的问题是......如果我使用以下命令将该列表绑定到datagridview:
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的博客中查看here。
就是这样,希望它也能帮到你 ^ _ ^
答案 2 :(得分:1)
您可以查看此属性DataGridView.DataSource Property
// Automatically generate the DataGridView columns.
dataGridView1.AutoGenerateColumns = true;
// Set up the data source.
bindingSource1.DataSource = GetData("Select * From Products");