使用BindingSource从UI向DataSource添加数据

时间:2015-08-07 20:59:53

标签: c# .net winforms ado.net bindingsource

我有一个表单(Form1),其中包含一个网格,通过BindingSource绑定到DataSource。

然后我有一个按钮,一旦点击,就会打开另一个表单(Form2),让用户输入新数据。

我将BindingSource从Form1传递给Form2,目标是一旦用户在Form2中“保存”他的输入,它将自动添加到Form1。

有没有办法做到这一点,没有直接访问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()知道在哪里取值,而没有明确告诉它去文本框,因为它与前面提到的控件绑定了?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

在专用构造函数中,以下代码将新记录添加到form1的BindingeSource,将DataSource分配给此表单的public Form2(BindingSource bindingSourceFromForm1) : this() { bindingSourceFromForm1.AddNew(); this.bindingSource1.DataSource = bindingSourceFromForm1.DataSource; this.bindingSource1.Position = bindingSourceFromForm1.Position; } 实例的DataSource并设置位置。您的新表单将使用户能够输入该新对象中的值。

bindingSourceFromForm1

如果您的用户可以取消操作,则必须通过调用if(!isAnimatedAlready){ animate(); setIsAnimated(true); }else{} 上的Issue adding reference to class library project in ASP.NET 5 (Core)来补偿该操作,但我将其视为例外情况,因为不清楚您是否需要/需要。