使用 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那。
我有一个包含网格的表单 (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那。