使用 BindingSource 从 UI 添加数据到 DataSource

Adding data to DataSource from UI with BindingSource

我有一个包含网格的表单 (Form1),通过 BindingSource 绑定到数据源。

然后我有一个按钮,单击该按钮会打开另一个表单 (Form2),用户应该可以输入新数据。

我将 BindingSource 从 Form1 传递到 Form2,目标是一旦用户 "saves" 在 Form2 中输入,它就会自动添加到 Form1。

有没有办法做到这一点,w/o 直接访问 UI 控件?

I.E -

public partial class Form2 : Form
{
    BindingSource bs = new BindingSource();
    public Form2(BindingSource bindingSourceFromForm1)
            {
                InitializeComponent();
                this.bs = bindingSourceFromForm1;
            }    
    private void button1_Click(object sender, EventArgs e)
            {
                DataRow dr = (this.bs.DataSource as DataTable).NewRow();
                dr["Col1"] = this.textBox1.Text;
                dr["Col2"] = this.textBox2.Text;
                this.bs.Add(dr);
            }
}

有没有办法将 Form2 上的控件(在上面的示例 textBox1/2 中)绑定到 BindingSource,然后让它自动添加 textBox1 和 2 中的值?

类似于调用 this.bs.Add(),其中 Add() 知道在哪里获取它的值而无需我明确告诉它转到文本框,因为它绑定到上述控件?

谢谢!

如果您像往常一样将 BindingSource 添加到表单设计器,请将 DataSource 设置为相同的源,以便您可以绑定文本框。

在专用构造函数中,以下代码将新记录添加到 form1 的 DataSource,将 DataSource 分配给此表单的 BindingeSource 实例的 DataSource 并设置位置。您的新表单将使用户能够在该新对象中输入值。

public Form2(BindingSource bindingSourceFromForm1)
    : this()
{
    bindingSourceFromForm1.AddNew();
    this.bindingSource1.DataSource = bindingSourceFromForm1.DataSource;
    this.bindingSource1.Position = bindingSourceFromForm1.Position;
}

如果您的用户可以取消操作,您必须通过在 bindingSourceFromForm1 上调用 RemoveCurrent 来弥补这一点,但我将其留作练习,因为不清楚您是否 want/need那。