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:保留手动添加但避免自动生成(可选)
如果需要允许用户手动添加行,但不想让表格自动生成对象,可以:
- 确保你的
auto类仅提供带参数的构造函数,不定义默认构造函数,这样DataGridView无法自动创建对象(但空行依然会显示,点击时会触发错误,因此更推荐方法1)。 - 或者处理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
相关产品推荐
相关产品推荐

