You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms DataGridView点击自动生成类对象问题求助(BindingList)

解决WinForms中DataGridView绑定BindingList时自动生成对象的问题

问题原因

DataGridView的AllowUserToAddRows属性默认值为true,当它绑定到带有默认构造函数的类型的BindingList时,表格底部会显示一行标记为*的空行,用户点击这行时,DataGridView会自动调用该类型的默认构造函数创建新对象并添加到BindingList中,这就是你遇到自动生成对象的原因。

解决方案

方法1:禁用自动添加行功能

直接关闭DataGridView的自动添加行功能,彻底避免自动生成对象的情况,这是最直接的解决方式。

你可以通过两种方式设置:

  • 设计时操作:在Visual Studio的属性窗口中找到DataGridView的AllowUserToAddRows选项,将其改为false。
  • 代码中设置:在Form构造函数里添加一行代码:
public Form1()
{
    InitializeComponent();
    dataGridView1.AllowUserToAddRows = false; // 新增这行禁用自动添加
    dataGridView1.DataSource = Automobiles;
}

方法2:保留手动添加但避免自动生成(可选)

如果需要允许用户手动添加行,但不想让表格自动生成对象,可以:

  1. 确保你的auto类仅提供带参数的构造函数,不定义默认构造函数,这样DataGridView无法自动创建对象(但空行依然会显示,点击时会触发错误,因此更推荐方法1)。
  2. 或者处理DataGridView的UserAddedRow事件,在事件中移除自动添加的空对象,但这种方法不如直接禁用自动添加行直观。

针对你的代码修改示例

同时注意你的代码中BindingList未指定泛型类型,建议补全以保证类型安全,修改后的构造函数如下:

public partial class Form1 : Form
{
    public BindingList<auto> Automobiles = new BindingList<auto>(); // 补全泛型类型

    public Form1()
    {
        InitializeComponent();
        dataGridView1.AllowUserToAddRows = false; // 禁用自动添加行
        dataGridView1.DataSource = Automobiles;
    }

    // 其余方法保持不变...
}

内容的提问来源于stack exchange,提问作者Roman Soroka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:30:17