dev*_*101 3 c# mvp architectural-patterns winforms
如果我有两个对象,即Fruit' andColor`及其定义如下:
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; }
}
Run Code Online (Sandbox Code Playgroud)
如何将的集合绑定Fruit (e.g. List<Fruit>)到DataGridView?结果输出将类似于以下内容:
+-----+--------+----------+
| Id | Name | Color |
+-----+--------+----------+
| 10 | Apple | Red |
| 20 | Orange | Orange |
| 30 | Grapes | Violet |
+-----+--------+----------+
Run Code Online (Sandbox Code Playgroud)
并且不像下面的以下输出:(注意:N in N.Color表示对象Color的名称空间)
+-----+--------+------------+
| Id | Name | Color |
+-----+--------+------------+
| 10 | Apple | N.Color |
| 20 | Orange | N.Color |
| 30 | Grapes | N.Color |
+-----+--------+------------+
Run Code Online (Sandbox Code Playgroud)
更新1:
我发现了一个类似的帖子在这里的SO和尝试了一些关于该职位的建议,但它不工作...
您有多种选择。
您可以重写类中的ToString方法Color以返回Name:
public class Color
{
public int ColorId { get; set; }
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
Run Code Online (Sandbox Code Playgroud)
或代替分配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;
Run Code Online (Sandbox Code Playgroud)
好的,在弄清楚如何使我的应用程序工作几天后,我设法找到了一些对我解决问题有很大帮助的文章。我想我会在这里为你们分享它,所以让我们开始吧:
首先,假设我们已经将一个水果列表存储在一个变量 Fruits 中,并假设我们已经从一个方法中获得了它的值:
List<Fruit> fruits = method();
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是...如果我使用以下命令将该列表绑定到 datagridview:
datagridview.DataSource = fruits;
Run Code Online (Sandbox Code Playgroud)
它会给我一个类似于以下的结果:
+-----+--------+------------+
| Id | Name | Color |
+-----+--------+------------+
| 10 | Apple | N.Color |
| 20 | Orange | N.Color |
| 30 | Grapes | N.Color |
+-----+--------+------------+
Run Code Online (Sandbox Code Playgroud)
这不是我想要的。所以我想也许如果我以某种方式手动将每一列放到 datagridview 中,我可以从我的水果列表中指定要显示的属性。所以我做了这样的事情:
DataGridViewColumn col3 = new DataGridViewTextBoxColumn();
col3.DataPropertyName = "Color.Name";
col3.HeaderText = "Color Name";
dataGridView1.Columns.Add(col3);
Run Code Online (Sandbox Code Playgroud)
但是,Color.Name在 DataGridView 列的 DataPropertyName 上指定类似的内容不起作用,只会导致在 DataGridView 上不显示任何数据的空白列。为了让它工作,DataGridView 应该有一个单元格格式功能来正确显示它在给定列中的值。有关如何做格式化的完整的教程,你可以检查出来这里从安东尼奥·贝洛的博客。
就是这样,希望对你也有帮助^_^
| 归档时间: |
|
| 查看次数: |
12475 次 |
| 最近记录: |