一个winform程序,vs2005,c#。
form1有一个datagridview控件,一个菜单,点菜单弹出一个新窗口form2,可以向数据库添加一条新记录,当form2提交后,如何使datagridview实时更新?部分代码如下:
form1中
 New newform = new New();
            //newform.Show();
            newform.ShowDialog(this);
newform既弹出的窗口,
newform中:
 DialogResult   Jresponse   =   MessageBox.Show("添加成功!", "确认",   
                                MessageBoxButtons.YesNo,   
                                MessageBoxIcon.Warning); 
                    if   (Jresponse   ==   DialogResult.Yes)
                    {} 
这中间的代码该如何写??

解决方案 »

  1.   

    form1中 
    將DataGridView 設為Public
    New   newform   =   new   New(this);
                            //newform.Show();
                            newform.ShowDialog(this); newform中:
    form1 frm;
    構造函數 Public newform(form1 _frm)
    {
       frm=_frm;
    }  DialogResult       Jresponse       =       MessageBox.Show("添加成功!",   "确认",      
                                                                    MessageBoxButtons.YesNo,      
                                                                    MessageBoxIcon.Warning);  
                                            if       (Jresponse       ==       DialogResult.Yes)
                                            {} 
         frm.datagridview.add............即可
      

  2.   

    我也遇到这个问哈,是这样解决的
    New   newform   =   new   New(); 
                            //newform.Show(); 
      newform.ShowDialog(this); 
    //这里newform还存在哦,没有被释放哦
    //在newform里定义公共变量放结果result
    if(newform.result == 成功)
       xxx;
      

  3.   

    form1中的datagridview我是直接拖放控件放上去的,改成public该在哪里改呢?
      

  4.   

    to  wumingbing:你说的我不是很明白唉
      

  5.   

        form1中的datagridview我是直接拖放控件放上去的,改成public该在哪里改呢? 
    DataGridView.Modifiers屬性設為public
      

  6.   

    wumingbing 说的是  New       newform       =       new       New();
      newform.ShowDialog(this);   
      loaddatagridview(); --在关掉newform后 重新再load一下  
            
      

  7.   

    我觉得窗体或类之间传递数据,最好是采用属性来传递,如LZ所说,如果form2中如果有一个TBox是表示名称,如果想把该
    TBox的内容传给Form1使用,则可以在form2中定义这样一个属性:
    string m_Name="";
    public string Name
    {
       get{return m_Name;}
       set{m_Name=value;Tbox.Text=m_Name;}
    }然后在Tbox的TextChanged事件中给m_Name赋值:
    m_Name=Tbox.Text;这样在Form1中实体一个Form2,
    Form2 frm2=new Form2();
    再使用frm2.Name就可以得到From2中的数据了
      

  8.   

    在form1里加方法
    public void RefreshData()
    {
        DataGridView读数据,绑定,刷新。
    }
    newform中:
      DialogResult       Jresponse       =       MessageBox.Show("添加成功!",   "确认",      
                                                                    MessageBoxButtons.YesNo,      
                                                                    MessageBoxIcon.Warning);  
                                            if       (Jresponse       ==       DialogResult.Yes)
                                            {if(Owner != null)
    {
        Owner.RefreshData();
    }
    }  
      

  9.   

    我以前也遇到这样的问题先在FORM2中定义一个FORM1的对象 不要实例化
    public Form1 NewForm1;然后在你FORM1中实例化 FORM2的时候 这样写
     FORM2 newForm2 = new FORM2();
     newForm2.NewForm1 = this;这样就可以调用 FORM1中的控件了,,
      

  10.   

    补充
    因为C#控件默认权限是PRIVATE
    你可以设置一个属性来访问控件 这样方便
    把控件放到属性里面 
    或者把控件访问权限设置为 PUBLIC
    不过这样容易修改控件数据 不安全
      

  11.   

    我在form2中,有多个text,datetime,是直接对数据库操作,form1中只是重新读取数据,这样用属性好像比较麻烦