重复设置DataGridView.DataSource报错“未将对象引用设置到对象的实例。”

private List<PointInfo> pointInfos = new List<PointInfo>();
PointInfo PointInfo = new PointInfo();
private void btn_AddPt_Click(object sender, EventArgs e)
{
    PointInfo = new PointInfo()
    {
        Name = pointName.Text,
        XPos = Convert.ToDouble(lbl_XAxisPosition.Text),
        YPos = Convert.ToDouble(lbl_YAxisPosition.Text),
        ZPos = Convert.ToDouble(lbl_ZAxisPosition.Text),
        Speed = Convert.ToDouble(textBox2.Text),
        HoldTime = Convert.ToInt32(textBox3.Text),
    };
    pointInfos.Add(PointInfo);
    dataGridView1.DataSource = pointInfos;
    dataGridView1.Refresh();
    
    // 列显示顺序
    dataGridView1.Columns["colName"].DisplayIndex = 0;
    dataGridView1.Columns["colX"].DisplayIndex = 1;
    dataGridView1.Columns["colY"].DisplayIndex = 2;
    dataGridView1.Columns["colZ"].DisplayIndex = 3;
    dataGridView1.Columns["colTime"].DisplayIndex = 4;
    dataGridView1.Columns["colSpeed"].DisplayIndex = 5;
    dataGridView1.Columns["col点位运动"].DisplayIndex = 6;
    dataGridView1.Columns["col直线插补"].DisplayIndex = 7;
    dataGridView1.Columns["col编辑点位"].DisplayIndex = 8;
    dataGridView1.Columns["col删除点位"].DisplayIndex = 9;
}

这里重复添加到第二次dataGridView1.Columns["colName"].DisplayIndex = 0;这里就会报错未引用到对象的实例

把上面创建的泛型list改为Bindlist就可以解决这个问题

List<>只是一个自动调整大小的数组,由给定类型的项目组成,带有几个辅助函数(例如:排序)。它只是数据。

 BindingList<>是类型列表或集合的包装器,它实现了 IBindingList界面。这是支持双向数据绑定(bind)的标准接口(interface)之一。它通过实现 ListChanged 来工作事件,在添加、删除或设置项目时引发。

  1. BindingList<T>

    • BindingList<T>是 命名空间下的一个类,通常用于绑定到数据源,比如 DataGridView、ListBox 等。System.ComponentModel
    • 它实现了 接口,这意味着它支持数据绑定,并提供了一些额外的功能,比如支持实时更新数据源。IBindingList
    • BindingList<T>提供了一些事件,比如 ,当列表发生变化时会触发这些事件,可以方便地通知绑定到该列表的控件进行更新。ListChanged
    • 与List 相比, 对数据绑定的支持更好,因此在需要绑定到控件的数据源时,通常使用 。BindingList<T>
  2. 列表<T>

    • List<T>是 命名空间下的一个类,用于表示一般的对象集合。System.Collections.Generic
    • 它提供了基本的集合操作,比如添加、删除、查找等,但不支持数据绑定。
    • List<T>不实现任何特定的接口来支持数据绑定,因此如果你需要将集合绑定到控件,你需要手动处理数据源的变化,并手动更新控件。

最后建议处理逻辑时用List,但作为数据源绑定是用BindingList.

相关推荐

  1. C++中面向对象设计模式实践

    2024-06-07 21:12:03       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 21:12:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 21:12:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 21:12:03       82 阅读
  4. Python语言-面向对象

    2024-06-07 21:12:03       91 阅读

热门阅读

  1. 网络安全第一课

    2024-06-07 21:12:03       28 阅读
  2. RN的安卓和iOS打包步骤(软件托管平台推荐)

    2024-06-07 21:12:03       29 阅读
  3. 开源大模型源代码

    2024-06-07 21:12:03       26 阅读
  4. 在RT-Thread下为MPU手搓以太网MAC驱动-4

    2024-06-07 21:12:03       28 阅读
  5. PyTorch、显卡、CUDA 和 cuDNN 之间的关系

    2024-06-07 21:12:03       32 阅读
  6. type 相关的几个试验

    2024-06-07 21:12:03       31 阅读
  7. 补充SimGNN

    2024-06-07 21:12:03       27 阅读