我有一个 datagriedview,我用一个默认有 7 列和 20 行的 txt 文件填充。 我想使用两种不同形式的按钮和文本框向我的 datagriedview 添加新行,form1 用于包含文本框和“ADD”按钮的打开 form2。 但我总是得到一个错误: system.invalidoperationexception: 'rows cannot be programmatically added to the datagridview's rows collection when control is data bound 我能做什么?
我试过 form1.datagridview.add(textbox1.text,textbox2.text...etc.) 但它不起作用。
如果您使用数据绑定将您的值绑定到
DataGridView
,而不是将行添加到控件本身,您必须将新值添加到 DataGridView
绑定到的实际列表中。
只有一个问题:仅将值添加到数据源不会刷新
DataGridView
,因此您不会在 UI 中看到它。
所以你真正想做的是使用
BindingSource
。
BindingSource
绑定到 DataGridView.DataSource
并且还有一个 DataSource
-属性本身,这是您的实际值列表。
这是一个小例子:
public partial class Form1 : Form
{
private BindingSource _dataSource;
public Form1()
{
InitializeComponent();
_dataSource = new BindingSource();
_dataSource.DataSource = new List<Person>
{
new Person { Name = "User1", Age = 1 },
new Person { Name = "User2", Age = 2 },
};
dataGridView1.DataSource = _dataSource;
}
private void button1_Click(object sender, EventArgs e)
{
_dataSource.Add(new Person { Name = "User3", Age = 3 });
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
(
dataGridView1
是通过将它从工具箱拖放到窗体中创建的,因此属性都具有默认值)
我用这个问题作为这个答案的参考: 如何在更新后刷新 c# dataGridView?