连接表格与ShowDialog()

假设我们有两种forms。 form1使用ShowDialog()函数调用form2 。 仅在form2关闭后才能在form1运行代码的最佳方法是什么? 实际上我想使用form2的数据填充form1的数据网格视图。

 void frmAnalysis_Activated(object sender, EventArgs e) { //I am using this event to add rows if (selectedEXP.Count != 0) { dgvExperiments.Rows.Clear(); foreach (SelectedExperiments s in selectedEXP) { for (int i = 0; i 0) { MessageBox.Show("True"); } try { int k = 0; OleDbDataAdapter da; da = new OleDbDataAdapter("select * from [AnalysisExperiments]", conn); string ExpQuery = "update AnalysisExperiments set SampleNumber = @SampleNumber, Status = @Status where ID = '" + tbJobNumber.Text + "' and Experiment = '"; foreach (DataGridViewRow row in dgvExperiments.Rows) { ExpQuery = ExpQuery + row.Cells["Experiment"].Value.ToString() + "'"; OleDbCommand updateCommand = new OleDbCommand(ExpQuery, conn); updateCommand.Parameters.Add("@SampleNumber", OleDbType.VarWChar); updateCommand.Parameters["@SampleNumber"].Value = row.Cells["SampleNumber"].Value.ToString(); updateCommand.Parameters.Add("@Status", OleDbType.Boolean); updateCommand.Parameters["@Status"].Value = row.Cells["Status"].Value; da.UpdateCommand = updateCommand; conn.Open(); k = da.UpdateCommand.ExecuteNonQuery(); conn.Close(); } if (k == 1) MessageBox.Show("Done"); else { MessageBox.Show("Nothing Updated!"); } } catch(Exception ex) { MessageBox.Show(ex.Message); } #endregion 

我试图更新一些数据,但我没有dgvExperiments行的错误。

这是一个示例,用于说明如何执行此操作,将数据和函数替换为您的实际数据和函数。

使用如下代码:

Form1中:

 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(this); form2.ShowDialog(); } public void SomeFunction(string someData) { dataGridView1.Rows.Clear(); foreach(string data in someData) { dataGridView1.Rows.Add(data); } } } 

如您所见,我this作为new Form2参数
窗体2:

 public partial class Form2 : Form { Form1 MainForm; public Form2(Form1 form)//This is why you need to give "this" as parameter { InitializeComponent(); MainForm = form; } private void button1_Click(object sender, EventArgs e) { //Here you call your function and send the data to fill the DataGridView List listOfData = new List {"someDataA", "someDataB"}; MainForm.SomeFunction(listOfData); this.Close(); } } 

正如您所见,参数在这里: public Form2(Form1 form) ,我们可以在类MainForm = form访问它,然后在某个操作(在我的情况下按钮单击)后,我们从mainform调用SomeFunction并传递数据。

如果您使用ShowDialog(),Form1中的代码执行将“停止”直到Form2关闭。 这就是你想要的。 如果您在Form2中有一个公共属性,则可以在Form2关闭后从Form1访问数据。 看看JohnG为示例提供的链接。