DataGridView 在 WinForm 中不刷新
DataGridView Not Refreshing in WinForm
在过去的几天里,我一直在绞尽脑汁思考如何刷新 DataGridView。我终于找到了一些有效的 Microsoft 文档;它提到我需要删除数据源,重新添加数据源,并重新填充 TableAdapter。
如果我在表单上创建一个按钮并将此代码添加到 Click 事件,DataGridView 将刷新。
dgvApps.DataSource = null;
dgvApps.DataSource = dStblApplications.tblApplications;
tblApplicationsTableAdapter.Fill(dStblApplications.tblApplications);
但是,如果我将相同的代码放在与 DataGridView 具有相同窗体的函数中,但从另一个窗体激活,它将无法工作。我开始调试,发现编译器到达了代码,读取了,但是没有执行。
//This is on Form1. Function that is called to create a popup box asking the user if they would like to re-submit the form.
public void SaveNewApplicationEntry()
{
string message = $"Successfully Created \n Would you like to create another application?";
string title = "Confirmation Required";
MessageBoxButtons buttons = MessageBoxButtons.YesNo;
DialogResult displayMsg = MessageBox.Show(message, title, buttons);
if (displayMsg == DialogResult.Yes)
{
addAppForm.Close();
frmAddApplication addNewApp = new frmAddApplication();
addNewApp.Show();
}
else
{
dgvApps.DataSource = null;
dgvApps.DataSource = dStblApplications.tblApplications;
tblApplicationsTableAdapter.Fill(dStblApplications.tblApplications);
addAppForm.Close();
}
//This is on Form2
private void btnSubmit_Click(object sender, EventArgs e)
{
newApp.AppName = txtAppName.Text;
newApp.AppDescription = txtAppDescription.Text;
newApp.AppMasterLocation = txtAppMasterLoc.Text;
newApp.AppCurrentVersion = txtAppCurrentVer.Text;
newApp.ActiveDate = dtpAppActiveDate.Value == null ? DateTime.Now : dtpAppActiveDate.Value;
newApp.InactiveDate = dtpAppInactiveDate.Value == null ? DateTime.Now : dtpAppInactiveDate.Value;
if (!newApp.AppName.Equals("") && !newApp.AppDescription.Equals("") && !newApp.AppMasterLocation.Equals("") && !newApp.AppCurrentVersion.Equals(""))
{
frmApplications mainApplicationForm = new frmApplications();
mainApplicationForm.SaveNewApplicationEntry();
}
}
是否有从 Form2 中刷新 Form1 上的 DataGridView 的正确方法?
您遇到的问题是因为这段代码:
frmApplications mainApplicationForm = new frmApplications();
mainApplicationForm.SaveNewApplicationEntry();
你的问题是你正在创建一个 frmApplication 的实例,
因此未调用打开的表单中的 SaveNewApplicationEntry()。
您可以试试这个:
if (Application.OpenForms.Cast<Form>().Any(form => form.Name == "frmApplications"))
{
frmApplications frmApp = (frmApplications)Application.OpenForms["frmApplications"];
frmApp.SaveNewApplicationEntry();
}
在过去的几天里,我一直在绞尽脑汁思考如何刷新 DataGridView。我终于找到了一些有效的 Microsoft 文档;它提到我需要删除数据源,重新添加数据源,并重新填充 TableAdapter。
如果我在表单上创建一个按钮并将此代码添加到 Click 事件,DataGridView 将刷新。
dgvApps.DataSource = null;
dgvApps.DataSource = dStblApplications.tblApplications;
tblApplicationsTableAdapter.Fill(dStblApplications.tblApplications);
但是,如果我将相同的代码放在与 DataGridView 具有相同窗体的函数中,但从另一个窗体激活,它将无法工作。我开始调试,发现编译器到达了代码,读取了,但是没有执行。
//This is on Form1. Function that is called to create a popup box asking the user if they would like to re-submit the form.
public void SaveNewApplicationEntry()
{
string message = $"Successfully Created \n Would you like to create another application?";
string title = "Confirmation Required";
MessageBoxButtons buttons = MessageBoxButtons.YesNo;
DialogResult displayMsg = MessageBox.Show(message, title, buttons);
if (displayMsg == DialogResult.Yes)
{
addAppForm.Close();
frmAddApplication addNewApp = new frmAddApplication();
addNewApp.Show();
}
else
{
dgvApps.DataSource = null;
dgvApps.DataSource = dStblApplications.tblApplications;
tblApplicationsTableAdapter.Fill(dStblApplications.tblApplications);
addAppForm.Close();
}
//This is on Form2
private void btnSubmit_Click(object sender, EventArgs e)
{
newApp.AppName = txtAppName.Text;
newApp.AppDescription = txtAppDescription.Text;
newApp.AppMasterLocation = txtAppMasterLoc.Text;
newApp.AppCurrentVersion = txtAppCurrentVer.Text;
newApp.ActiveDate = dtpAppActiveDate.Value == null ? DateTime.Now : dtpAppActiveDate.Value;
newApp.InactiveDate = dtpAppInactiveDate.Value == null ? DateTime.Now : dtpAppInactiveDate.Value;
if (!newApp.AppName.Equals("") && !newApp.AppDescription.Equals("") && !newApp.AppMasterLocation.Equals("") && !newApp.AppCurrentVersion.Equals(""))
{
frmApplications mainApplicationForm = new frmApplications();
mainApplicationForm.SaveNewApplicationEntry();
}
}
是否有从 Form2 中刷新 Form1 上的 DataGridView 的正确方法?
您遇到的问题是因为这段代码:
frmApplications mainApplicationForm = new frmApplications();
mainApplicationForm.SaveNewApplicationEntry();
你的问题是你正在创建一个 frmApplication 的实例, 因此未调用打开的表单中的 SaveNewApplicationEntry()。
您可以试试这个:
if (Application.OpenForms.Cast<Form>().Any(form => form.Name == "frmApplications"))
{
frmApplications frmApp = (frmApplications)Application.OpenForms["frmApplications"];
frmApp.SaveNewApplicationEntry();
}