system.invalidoperationexception:“当控件是数据绑定时,无法以编程方式将行添加到数据网格视图的行集合中。”

问题描述 投票:0回答:1

我有一个 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.) 但它不起作用。

c# datagridview row add windows-forms-designer
1个回答
0
投票

如果您使用数据绑定将您的值绑定到

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?

© www.soinside.com 2019 - 2024. All rights reserved.