我有一个表单(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()
知道在哪里取值,而没有明确告诉它去文本框,因为它与前面提到的控件绑定了?
谢谢!
答案 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)来补偿该操作,但我将其视为例外情况,因为不清楚您是否需要/需要。