将数据从一种形式传递到另一种形式

时间:2010-01-31 07:10:13

标签: c#-3.0

我有一个带网格的表单,我想根据用户点击编辑按钮时选择哪一行,将信息从第一个表单传递到第二个表单。

最好的方法是什么?如果用户想要添加新表单或使用第一个表单数据网格的选定行中的值填充第二个(编辑)表单,我该如何决定表单应该如何为空?  行值是同一对象的所有属性。

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

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

这是打开一个空白表单,但我想在用户想要编辑现有记录时使用基于所选行的对象加载它。

2 个答案:

答案 0 :(得分:1)

假设您的form1是包含数据网格(grdMyData)的表单,它显示MyClass类实例的行,而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
   }
}

此代码假设您具有适当的Form2构造函数,该构造函数采用其使用的对象类型。当您在Form2中工作时,数据将自动影响Form1显示,因为它们正在使用同一对象的实例。

答案 1 :(得分:0)

我建议在一个表单中公开一个事件,而另一个表单可以使用。

这是官方教程 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(...);

因此,您需要在目标表单中引用源表单,否则您将需要在两个表单之外设置事件处理。