连接表格与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为示例提供的链接。