将多个列表绑定到DataGridView

我有两个静态列表,它们将绑定到DataGridView以及两个按钮字段。 我只能绑定一个列表和一个按钮字段。 是否可以将多个列表绑定到DataGridView

 ServiceController objSAVAdminService = new ServiceController("SAVAdminService"); ServiceController objSAVService = new ServiceController("SAVService"); ServiceController objPPVService = new ServiceController("PPVService"); ServiceController objMLLService = new ServiceController("MLLService"); List ServiceName = new List(); List ServiceStatus = new List(); ServiceName.Add(objSAVService.ServiceName.ToString()); ServiceName.Add(objSAVAdminService.ServiceName.ToString()); ServiceName.Add(objPPVService.ServiceName.ToString()); ServiceName.Add(objMLLService.ServiceName.ToString()); ServiceStatus.Add( objSAVService.Status.ToString()); ServiceStatus.Add( objSAVAdminService.Status.ToString()); ServiceStatus.Add( objPPVService.Status.ToString()); ServiceStatus.Add( objMLLService.Status.ToString()); 

我需要将这两个列表绑定到DataGridView并且每行上还有两个按钮来启动或停止相应的服务。

开箱即用,不支持数据绑定DataGridView和两个列表。 我可以看到两个主要选项:

  1. 放弃DataBinding – 您不需要为DataGridView DataSource属性设置列表,并依赖DataBinding来使一切正常工作。 相反,您可以在未绑定模式下工作并编写代码来自行移回数据。 看看MSDN上这个简单的例子。

  2. 创建自定义对象 – 如果您希望方便数据绑定,可以创建一个组合两个列表的对象,然后绑定到该对象。 如果您只想要单向数据绑定(当DataGridView更改时不更新列表中的数据),那么您甚至可以使用一个简单的LINQ查询来执行此操作。 否则,您可以编写某种自定义对象作为两个列表的包装器 – 如果您设计得很好,您应该能够在两个列表上拥有完整的双向数据绑定。

还有另一种选择,因为您使用的是2个字符串列表,您可以这样做

 List BindList = new List(); BindList.AddRange(ServiceName); BindList.AddRange(ServiceStatus); foreach(string item in BindList) { Datagridview1.Rows.Add(item.objSAVService,item.objSAVAdminService.....) }