如何创建一个完整的访问来源:表2到Form1
这样我就可以使用所有的文本框,Datagridviews和我在我的第二个窗体2完全访问到Form1
我的计划从1跳转指定信息:用户在我的DataGridView中选择一个项目,然后自动打开我的第二个窗体,其中所有信息都在文本框中给出,等等......用户可以修改它们并将它们保存到我的SQL数据库中,Form2关闭并且Form1再次打开
我看着Stackoverflow和谷歌,但我没有找到一个soulution,为我工作...
如何创建一个完整的访问来源:表2到Form1
这样我就可以使用所有的文本框,Datagridviews和我在我的第二个窗体2完全访问到Form1
我的计划从1跳转指定信息:用户在我的DataGridView中选择一个项目,然后自动打开我的第二个窗体,其中所有信息都在文本框中给出,等等......用户可以修改它们并将它们保存到我的SQL数据库中,Form2关闭并且Form1再次打开
我看着Stackoverflow和谷歌,但我没有找到一个soulution,为我工作...
假设你有个人类:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
并绑定到网格人员的名单
List<Person> people = GetPeople();
peopleGridView.DataSource = people;
当你在某一行上双击,获得数据绑定的人,把它传递给第二形式:
private void peopleGridView_DoubleClick(object sender, EventArgs e)
{
if (peopleGridView.CurrentRow == null)
return;
Person person = (Person)peopleGridView.CurrentRow.DataBoundItem;
using (var editForm = new PersonDetailsForm(person))
{
if (editForm.ShowDialog() != DialogResult.OK)
return;
// get updated person data and save them to database
UpdatePerson(editForm.Person);
}
}
在编辑窗体中显示控件的人数据(也可以使用数据绑定):
public partial class PersonDetailsForm : Form
{
public PersonEditForm(Person person)
{
InitializeComponent();
idLabel.Text = person.Id.ToString();
nameTextBox.Text = person.Name;
// etc
}
public Person Person
{
return new Person {
Id = Int32.Parse(idLabel.Text),
Name = nameTextBox.Text
};
}
}
好处 - 你可以改变PersonEditForm
独立 - 添加/删除控制,改变他们的类型,将数据绑定等不改变你的主要形式。
我会稍后再尝试,如果我这样做,我会写^^ – Schrader
你可以创建你的窗体2一个构造函数,将填补你的控件例如参数:
public Form2(string property1, List<object1> objects)
{
textbox1.text = property1;
gridview1.DataSource = objects;
//and so on
}
,然后从Form1中
Form2 form = new Form2(string1,list1);
form.Open();
打电话给他们,或者你可以通过一个单一的对象到构造函数并在Form2中扩展其属性
将所有必需的数据传输到第三个类,并将该实例作为参数传递给form2。
难道你不能只让Form1(控件,属性等)的所有成员公开吗? –
你找不到解决方案,因为你试图做的不是好主意。在表单之间传递*数据*而不是使其内部可见 –
@SergeyBerezovskiy如何在我的表单之间传递数据以及为什么它不是一个好主意? :/ – Schrader