【问题标题】:Update textboxes in Form1 on updating the datagridview from Form2从 Form2 更新 datagridview 时更新 Form1 中的文本框
【发布时间】:2013-06-24 10:49:35
【问题描述】:

大家好,我的功能编码如下更改并重新绑定 datagridview 这是我的代码

// Form1代码

    public void UpDateData(DataTable dt)
   {
     dataGridView1.Refresh();
     dataGridView1.DataSource = dt;
     updateTextBoxes();
   }
    public void updateTextBoxes()
    {
      //  Some caluculation based on the datagridview rows
    }

Form2 按钮点击代码

private void button1_Click(object sender, EventArgs e)
{
   // Some code to collect the changes made
   Form1 f=new Form1();
   f.UpDateData(dt);
   this.close();
 }

除了 updateTextBoxes 方法之外,一切都很好,这不是根据需要更新文本框,有人可以帮我吗

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您正在创建一个与原始实例无关的 Form1 新实例(并且可能显示的数据不同),因此您的更新代码将作用于此表单实例(顺便隐藏)并且不会更改原始实例中的任何内容。

    解决这个问题最简单的方法是将Form1的实例传递给Form2的构造函数,将该实例保存在Form2中,并使用这个保存的实例调用更新

    在form1.cs中

     Form2 f = new Form2(this);
     f.Show();
    

    在form2.cs中

    Form1 _callingInstance;
    public Form2(Form1 caller)
    {
         _callingInstance = caller;
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
       _callingInstance.UpDateData(dt);
       this.Close();
     }
    

    解决这个InterForm Communication 问题的更好方法是创建和使用Custom Event。在这种情况下,Form2 在完成更改后会尝试通知每个对其更改感兴趣的客户端他们需要更新他们的数据。 Form1 订阅从 Form2 引发的事件,并在收到通知时更新其数据....
    这种方法被认为更好,因为这两种形式之间的耦合较少。

    在form2.cs中

    公共委托无效 OnUpdateData(); 公共事件 OnUpdateData UpdateData;

    private void button1_Click(object sender, EventArgs e)
    {
       if(UpdateData != null) UpdateData();
       this.Close();
     }
    

    在form1.cs中

     Form2 f = new Form2();
     f.UpdateData += myCallbackUpdateMethod;
    
    
     public void myCallbackUpdateMethod()
     {
        DataTable dt = GetTable();
        UpDateData(dt)
     }
    

    【讨论】:

      【解决方案2】:

      使用下面的代码,它会解决你的问题

      不要创建表单的新实例。而是创建对调用表单的引用,然后在调用表单中调用 UpdateData() 方法

        //Form1 f=new Form1();
         callingform.UpDateData(dt);
         this.close();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        • 1970-01-01
        相关资源
        最近更新 更多