2014-03-07 57 views
0

如何创建一个完整的访问来源:表2到Form1
这样我就可以使用所有的文本框,Datagridviews和我在我的第二个窗体2完全访问到Form1

我的计划从1跳转指定信息:用户在我的DataGridView中选择一个项目,然后自动打开我的第二个窗体,其中所有信息都在文本框中给出,等等......用户可以修改它们并将它们保存到我的SQL数据库中,Form2关闭并且Form1再次打开

我看着Stackoverflow和谷歌,但我没有找到一个soulution,为我工作...

+1

难道你不能只让Form1(控件,属性等)的所有成员公开吗? –

+2

你找不到解决方案,因为你试图做的不是好主意。在表单之间传递*数据*而不是使其内部可见 –

+0

@SergeyBerezovskiy如何在我的表单之间传递数据以及为什么它不是一个好主意? :/ – Schrader

回答

2

假设你有个人类:

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独立 - 添加/删除控制,改变他们的类型,将数据绑定等不改变你的主要形式。

+0

我会稍后再尝试,如果我这样做,我会写^^ – Schrader

1

你可以创建你的窗体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中扩展其属性

-2

将所有必需的数据传输到第三个类,并将该实例作为参数传递给form2。