如果我有两个对象,即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;
}
}
或者,您可以选择一个匿名对象列表,并在结果中选择Color
的Name
,而不是将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");