繁体   English   中英

如何将datagridview中的列绑定到c#中的数组元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM