[英]How to bind column in datagridview to an array element in c#
我在 Visual Studio 2015 中使用 C#。我有一个带有 datagridview 的 winform。 我有一个自定义类
public class deNode
{
public byte machine {get;set;}
public DateTime eDate {get;set;}
public int[] errorCode {get;set;}
}
我有 :
List<deNode> equipment;
我想使用设备作为DataGridView
DataSource
,并指定errorCode[0],errorCode[1]..errorCode[17]
作为 DataGridView 中各个列的DataPropertyName
s。
我已经尝试过equipmentGrid.Columns[2].DataPropertyName = "errorCode[2]"
但这不起作用。 我怎样才能实现我的目标?
欣赏任何想法。
谢谢。
将模型与显示模型的方式分开。 制作类似于VideModel
东西,这是模型和 DataGridView 之间的适配器。
除此之外,这可以解决您的问题,它还可以更改您的 HMI,而无需更改您的模型。 将来您可以(在限制范围内)更改模型,而无需更改数据网格视图。
class ViewModelDeNode
{
public DeNode DeNode {get; set;}
public int ErrorCode00 => this.DeNode.ErrorCode[00];
public int ErrorCode01 => this.DeNode.ErrorCode[01];
...
}
您的 DataGridView 中的列:
DataGridViewColumn columnErrorCode01 = new DataGridViewColumn()
{
Name = ...
HeaderText = "Error code 01",
DataPropertyName = nameof(ViewModelDenode.ErrorCode01),
...
};
IEnumerable<DeNode> deNodes = ...
IEnumerable<ViewModelDenode> displayableDeNodes = deNodes
.Select(deNode => new ViewModelDeNode
{
DeNode = deNode,
});
DataGridView dgv = new DataGridView(...);
dgv.DataSource = displayableDeNodes.ToList();
或者,如果您想编辑 datagridview(添加/删除/更新行):
dgv.DataSource = new BindingList<ViewModelDeNode>(displayableDeNodes);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.