绑定到DataGridView,因此每个单元格都是绑定对象而不是每一行

时间:2009-11-10 19:41:13

标签: c# .net winforms data-binding datagridview

我正在尝试设置DataGridView来表示地图册中的页面。网格中的每个单元格表示一个MapGrid对象。用户可以使用它来设置MapGrids的路由。

public class MapGrid
{
    public int ID { get; set; }
    public short PageNumber { get; set; }
    public char ColumnNumber { get; set; }
    public byte RowNumber { get; set; }
    public RouteSummary Route { get; set; }
}  

public class RouteSummary
{
    public int ID { get; set; }
    public byte RouteNumber { get; set; }
}

我想知道我是否可以使用数据绑定将我的MapGrid对象列表绑定到网格。我想做这样的事情:

List<MapGrid> mapGrids = GetMapGrids();
dataGridView.DataSource = mapGrids;

我希望dataGridView显示MapGrid.RouteSummary.RouteNumber属性。

我想也许我可以创建一个ILookup<byte, MapGrid>来按行对MapGrids进行分组。那么也许我可以将它绑定到DataGridView。我不知道如何告诉它显示RouteNumber。

如果列数是常量,我可以简单地为每个列创建一个具有属性的对象,并将这些列的列表绑定到DataGridView。但当然事情并非那么简单。列数不是常数。所以我不明白这是怎么回事。

有什么想法吗?我是否试图做一些超出数据绑定范围的事情?现在我想我将不得不用我的MapGrid对象手动填充DataGridView并使用CellValueChanged事件来更新内容。

2 个答案:

答案 0 :(得分:2)

我得出的结论是,使用DataGridView.DataSource属性无法完成我想要做的事情。最后,我使用for循环手动将列和行添加到DataGridView

答案 1 :(得分:0)

为什么要额外上课呢?也可以将MapGrid定义为

public class MapGrid
{
    public int ID { get; set; }
    public short PageNumber { get; set; }
    public char ColumnNumber { get; set; }
    public byte RowNumber { get; set; }
    public int RouteID { get; set; }
    public byte RouteNumber { get; set; }
}

然后,您可以根据需要使用简单绑定。