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();
  }