winform 里面  form2 添加信息,添加成功后,form1更新。form1绑定的是form2所添加的信息。怎么实现Form2添加完后让form1刷新数据。是winform里面。谢谢,谢谢!

解决方案 »

  1.   

    1、如果form2是form1打开的,那么可以在form2关闭时,重新获取数据绑定,就实现刷新了。2、如果想定时刷新,就放一个timer。
      

  2.   

    用事件
    from2添加数据后触发from1数据更新
      

  3.   


    不行的。这是winform跟web的不一样的,这也是我纠结了半天的问题。
      

  4.   

    委托修改主窗体相关数据http://topic.csdn.net/u/20100106/20/e9697297-75f9-4450-aaa9-da0da416cf41.html?39668
      

  5.   


    是第一种情况。但是我在绑定成功的时候,已经再次调用了form1的bind方法了啊。但是没反应的。要不我也不来论坛求救了。。
      

  6.   

    方法有2
    1。form2修改到数据库 关闭后 重新绑定 form1 2。form1 中写一个public方法  在form2关闭前 调用form1中的方法方法2 又有两种传递form1 的方法
    1。form1 作为form2 的ower 传递过去
    2。form2 中写一个 以form1 为参数的构造函数 初始化form2的时候就传递过去
      

  7.   


    绑定数据是到数据控件,清楚数据啊,然后重新绑定,怎么不能重新绑定呢?这个比web可好控制多了
      

  8.   


    你怎么打开的form2呢?没反应是你的bind方法的问题吧
      

  9.   

    是在form1上面有个按钮叫添加。单击这个按钮的时候弹出form2.在form2添加信息成功,单击关闭,回到form1,是不是应该看到刚才添加的那条数据的?可是没有。我已经在form2添加成功后写了:from1 f1=new form1();f1.bind(); this.close();但是没反应的。我的form1里面绑定数据就是调用的Bind()方法,不会有事的。
      

  10.   

    我的代码是这样写的:  public void BindList()
            {
                string sql="select * from Rip_Role";
                RolesList.DataSource = BLL.Promissions.ExecuteDatatable(sql, CommandType.Text, null);
            } 下面的是在添加成功时的:
        if (BLL.Promissions.ExecuteNonQuery(sql, CommandType.Text, parms)>0)
                    {
                        PermissionManager p = new PermissionManager();
                        p.BindList();
                        this.Close();
                     }
     
      

  11.   

    form1获得焦点事件 然后重新绑定 刷新 看看行不行
      

  12.   

    用观察者模式来做
    form2修改后 给form1一个委托事件 
    form1在事件中实现刷新
      

  13.   

    我记得有给refresh  试试
      

  14.   


    //winForm1里:
            //绑定事件,我这是绑定到combobox
            public void BindDDL(参数)
            {
                cobb_server.DataSource = Bl.LoadSSr(参数);
                cobb_server.DisplayMember = "QdbIP";
                cobb_server.ValueMember = "ID";
                cobb_server.SelectedIndex = 0 ;
            }
    //winForm2里:
            public winForm1 wf1;        private void 需要改变wf1的事件()
            {
                if (wf1 == null || wf1.IsDisposed)
                { }
                else { wf1.BindDDL(参数); }
            }
      

  15.   


    public partial class Form2 : Form
        {        //密码窗体
           
            public Form2()
            {
                InitializeComponent();
            }
            public delegate void mydelegate();//定义一个委托 
            public static  event mydelegate myevent;//定义上诉委托类型的事件 
            private void button1_Click(object sender, EventArgs e)
            {
             
                if (myevent != null)
                {
                    myevent();
                }         }
    C# code
     private void button2_Click(object sender, EventArgs e)
            {
                Form2 fm2 = new Form2();
                Form2.myevent += new Form2.mydelegate(fm2_myevent);
                fm2.Show(); 
                
            }        private void Form1_Load(object sender, EventArgs e)
            {
                MessageBox.Show("你好");
            }
            void fm2_myevent()
            {
                Form1_Load(null,null);
            }
      

  16.   

    这种问题可以考虑接口+事件。.net里有一个INotifyPropertyChanged接口,其背后是一种解决你遇到的问题的不错的模式,当然这种模式可能不适用于你的情况,但其思想是可以借鉴的。去MSDN,搜索这个接口的名字,你就知道怎么回事了。
      

  17.   

    这么多人都回答了啊最简单的就是form2调用form1的绑定数据方法,添加完新数据后调用form1的绑定方法即可
      

  18.   

    重新绑定是不行的.在另一个窗体里面做不到立即刷新出来. 你要重新运行那个窗体才出的来.
    time控制秒数是一种办法.  我也在纠结这个问题.我想知道委托怎么做. 单例模式怎么做.事件怎么做.
    楼主解决了? 解决了的话共享个给我把.
      

  19.   

    可以用DialogResult,form2添加完成后做个标记,再在form1中调用Load事件