两个form窗体相互传值,formA传datatable1给formB;formA又想从formB拿到datatable2,怎么写
时间: 2024-09-27 12:17:52 浏览: 25
在Windows Forms应用程序中,通过DataSet、DataTable等数据结构传递数据,通常可以使用以下步骤:
1. **在FormA中**,将DataTable1封装到一个公共类或者`Serializable`的类中,如`FormData`:
```csharp
public class FormData
{
public DataTable DataTable1 { get; set; }
}
// 在需要传递的时候
FormData formData = new FormData();
formData.DataTable1 = dataTable1; // 假设dataTable1已经填充了数据
// 使用`ShowDialog`打开FormB,并传递数据
FormB formB = new FormB(formData);
formB.ShowDialog();
```
2. **在FormB中**,接受并处理FormData:
```csharp
public partial class FormB : Form
{
private FormData _receivedData;
public FormB(FormData data)
{
InitializeComponent();
_receivedData = data;
if (_receivedData.DataTable1 != null)
// 设置FormB的数据控件,如DataGridView显示DataTable1的内容
dataGridView1.DataSource = _receivedData.DataTable1;
}
// 然后你可以创建另一个DataTable2,在适当的地方设置或者获取
private DataTable dataTable2;
// ...
}
```
3. **返回数据时**,如果FormB需要返回DataTable2,可以在关闭FormB时将它添加到FormData里:
```csharp
private void buttonClose_Click(object sender, EventArgs e)
{
_receivedData.DataTable2 = dataTable2; // 假设填充了新的DataTable2
this.DialogResult = DialogResult.OK; // 如果你想让FormA接收结果
Close();
}
```
4. **在FormA中接收返回值**(如果有返回值的情况下):
```csharp
if (formB.ShowDialog() == DialogResult.OK)
{
// 现在可以从_receivedData.DataTable2中获取formB返回的DataTable2
DataTable dataTable2FromB = _receivedData.DataTable2;
// ...然后做进一步操作
}
```