【问题标题】:Update form from form closing event on another form从另一个表单上的表单关闭事件更新表单
【发布时间】:2024-01-08 10:35:02
【问题描述】:

我正在尝试更新“总机”上的 datagridview 以解决并发问题。当某些过程完成时,总机有许多复选框可以选中。当我单击已编辑记录上的复选框时,我收到并发错误,因为 dgv 不是最新的。

我试过这样做:

How to refresh datagridview when closing child form?

无济于事,因为它在我的整个项目中引发了其他错误。

有关如何在关闭另一个表单的表单上刷新我的交换机上的 datagridview 的任何帮助都会很棒。

谢谢

public partial class frmSwitch : Form 
{
    public frmSwitch() 
    {
        //'add a label and a buttom to form
        InitializeComponent();
    }


    public void PerformRefresh() 
    {
        this.propertyInformationBindingSource.EndEdit();
         this.propertyInformationTableAdapter.Fill(this.newCityCollectionDataSet.PropertyInformation);
        this.propertyInformationDataGridView.Refresh()      }
}

public partial class frmSummary : Form
{
    frmSwitch _owner;
    public frmSummary(frmSwitch owner)
    //public frmSummary()
    {
        InitializeComponent();

            _owner = owner;
            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmSummary_FormClosing);
        }
        private void frmSummary_FormClosing(object sender, FormClosingEventArgs e)
        {
           _owner.PerformRefresh();
        }

这就是我试图做的,但是当我需要打开 Form2 时,它在其他情况下引起了问题。该问题具体出现在表格2的原始打开中,如下所示:

private void propertyInformationDataGridView_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    System.Data.DataRowView SelectedRowView;
    newCityCollectionDataSet.PropertyInformationRow SelectedRow;

    SelectedRowView = (System.Data.DataRowView)propertyInformationBindingSource.Current;
    SelectedRow = (newCityCollectionDataSet.PropertyInformationRow)SelectedRowView.Row;

    frmSummary SummaryForm = new frmSummary();
    SummaryForm.LoadCaseNumberKey(SelectedRow.CaseNumberKey, true, null);
    SummaryForm.Show();



}

【问题讨论】:

    标签: c# winforms datagridview refresh


    【解决方案1】:

    听起来您正在尝试创建 Switchboard 表单的新实例,而不是修改表单的现有实例。当您从总机打开表单时,我建议将实例引用传递给总机表单。然后,当您关闭打开的表单时,在您的 form_closure 事件中,您会将传入的实例称为要更新的 Switchboard 表单。

    本文指定了此方法和其他方法:

    http://colinmackay.co.uk/blog/2005/04/22/passing-values-between-forms-in-net/

    【讨论】:

    • @korrowan - 不确定你的意思,但基本上,这些方法可以更新你的数据网格并在你的表单上启动刷新方法,这样你就不会得到那个(或其他)错误
    • @BiggsTRC 我相信这与我已经做过的事情是一样的,除非我感到困惑......我的原始帖子已用我使用的代码进行了更新。
    • @korrowan - 如果您在交换机上手动运行更新,它是否有效?我要问的是这种方法PerformRefresh 是否有效?您是否尝试过在您的交换机 (Form1) 上添加一个新按钮来启动方法 PerformRefresh 并在关闭 Form2 后单击它?
    • @BiggsTRC 不,我没有,但我会这样做。这是我在表单关闭事件期间遇到的错误:错误 1 ​​'CityCollectionCSharp.frmSummary' 不包含采用 0 个参数的构造函数
    • @BiggsTRC 出现在这里 frmSummary SummaryForm = new frmSummary(); SummaryForm.LoadCaseNumberKey(SelectedRow.CaseNumberKey, true, null);尝试调用 frmSummary 时的 SummaryForm.Show()