【发布时间】:2017-02-28 10:19:09
【问题描述】:
假设我们有两种形式。 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 < s.size; i++)
{
int index = dgvExperiments.Rows.Add();
dgvExperiments.Rows[index].Cells["Experiment"].Value = s.name;
}
}
}
}
#region Update database
//and here is a code to update data but the problem that the
// foreach loop is skipped since there is no rows in dgvExperiments
// however I can see a row when the form is Active
if(dgvExperiments.Rows.Count >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 的行有什么问题。
【问题讨论】:
-
我留下了答案,将
SomeFunction替换为以数据为参数并填充数据网格视图的函数。并在调用时替换。 -
如果您调用 ShowDialog(),Form1 将等待 form2。否则,您可以设置自己的事件,该事件会在 form2 关闭时触发。
-
@MohammedAl-A'mri 如果您在填写 datagridview 时遇到问题,请在此处发布该代码,以便我查看。
-
这是一个大的):但我会发布它@EpicKip