将数据从一种表单传递到其他表格

问题描述:

我有一个表格,我希望将信息从第一个表单传递到第二个表单,当用户单击编辑按钮时,将根据哪一行进行选择。将数据从一种表单传递到其他表格

什么是最好的方法?以及如何决定如果用户想要添加一个新的表单或者用第一个表单datagrid的选定行中的值填充第二个(编辑)表单时该表单应该是空白的? 行值是同一对象的所有属性。

我可以删除并添加一个新的对象,它编辑一个现在很难用的对象,我应该如何加载第二个表单?

我目前正在创建和实例然后instance.Show();

这是工作打开一个空白表格,但我想要加载与基于选定的行的对象,当用户想编辑一个现有的记录。

+0

Web窗体或Windows窗体或WPF窗体? – abmv 2010-01-31 07:20:41

+0

Windows窗体,桌面应用程序。 – Alex 2010-01-31 08:28:14

假设你的form1是带有显示MyClass类实例行的数据网格(grdMyData)的表单,form2是用于编辑给定行数据的表单。 当用户点击编辑,你可以这样做:

private void btnEdit_Click(sender e, EventArgs arg) 
{ 
    if (grdMyData.SelectedRows.Count == 0) 
     return; //nothing to do 

    MyClass selectedRow = (MyClass)grdMyData.SelectedRows[0].DataBoundItem; 
    Form2 frm2 = new Form2(selectedRow); 
    if (frm2.ShowDialog() == DialogResult.OK) 
    { 
     //do something if needed 
    } 
} 

此代码是假设你有正确的窗体2的构造这需要对象的它与类型。当你在Form2中工作时,数据将自动影响Form1显示,因为它们正在处理同一对象的实例。

+0

谢谢,我终于弄清楚了如何用对象作为参数来创建另一个构造函数。这样一个简单的解决方案正盯着我。 – Alex 2010-02-03 10:04:10

我建议以一种形式暴露事件​​其他形式可以消耗。

这里是官方教程
http://msdn.microsoft.com/en-us/library/aa645739(VS.71).aspx

基本上它会是这样的

// Source form 
public event YourEventHandlerType EventName; 

// Wherever the event occurs 
EventName.Invoke(...); 

// Destination form 
this.referenceToSourceForm.EventName += MyEventHandler(...); 

所以,你需要在目标表单一些参考源代码的形式,或者需要否则在两种形式之外设置事件处理。