假设我们有两种形式。form1
called form2
using ShowDialog()
功能。使代码运行的最佳方法是什么form1
仅在那之后form2
关闭了?
实际上我想填充一个数据网格视图form1
使用来自的数据form2
.
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 的行有什么问题。
这是一个示例,说明如何执行此操作,用您的实际数据和函数替换数据和函数。
使用如下代码:
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<string> listOfData = new List<string> {"someDataA", "someDataB"};
MainForm.SomeFunction(listOfData);
this.Close();
}
}
正如你所看到的,参数在这里:public Form2(Form1 form)
我们让它在课堂上可以访问MainForm = form
然后在执行某个操作后(在我的例子中单击按钮)我们调用SomeFunction
从主窗体并传递数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)