none
父窗体BindingNavigator导航按钮如何操作当前活动子窗体DataGridView中的记录? RRS feed

  • 问题

  • 父窗体有个BindingNavigator工具nvgt,打开的几个子窗体中都含有BindingSource连接器和DataGridView控件,我想在切换子窗体时自动将父窗体的BindingNavigator的DataSource设为当前子窗体的BindingSource,并可以操作子窗体DataGridView控件的记录(移动、增、删)

    在我的代码中

    父窗体:名为frmP,其中的导航工具栏BindingNavigator名为nvgt

    当前活动子窗体为frmA,其中的DataGridView控件名为dtgrdvw,BindingSource组件名为bdsrc,数据源为一个数据库表,用数据适配器dp填充到数据集ds,子窗体Load事件中已绑好数据,子窗体一切正常,子窗体相关代码如下:

    protected void frmA_Load(object sender, EventArgs e)
            {
                this.bdsrc.DataSource = ds.Tables[0] ; //绑定连接器,数据源在构造函数中已初始化
                this.dtgrdvw.DataSource =this.bdsrc; //绑定表格控件
                this.Tag = this.bdsrc;//将连接器赋值到Tag属性以便传给父窗体
            }

    我试图在父窗体中的下述事件中捕获子窗体的BindingSource作为父窗体导航条的数据源,

    但导航条不能操作子窗体记录

     private void frmP_MdiChildActivate(object sender, EventArgs e)
            {
                if(ActiveMdiChild!=null &&(ActiveMdiChild.WindowState==FormWindowState.Maximized))
                {
                    this.nvgt.BindingSource = ActiveMdiChild.Tag as BindingSource;
                }
            }

    请教各位老师,我的代码应如何修改才能达到目的?


    LJH

    2013年2月14日 6:31

答案

  • Hi SZLJH,

      欢迎来到MSDN中文论坛。

      你这个涉及到两个窗体的互相操作或者说互相传值,我建议你阅读我早期的帖子关于这方面的三种办法去解决。

      Child Form to Parent Form Communication 

      这其中强烈建议用增加委托来解决,这样是最适合你这种情况的办法。


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    2013年2月15日 2:43
    版主
  • 谢谢Jason Wang 的回复,感觉传值也麻烦,我在子窗体的下述事件中解决了这一问题:

     private void frmA_Activated(object sender, EventArgs e)
            {
                for (int i = 0; i < this.MdiParent.Controls.Count; i++)
                {
                    if (this.MdiParent.Controls[i] is BindingNavigator)
                    {                    
                        ((BindingNavigator)this.MdiParent.Controls[i]).BindingSource = this.bdsrc;
                    }
                }            
            }//这样,当子窗体被激活时,自动把自己的连接器绑定到父窗体的导航栏控件,从而就可以在父窗体中操纵自己的数据了。


    LJH

    2013年2月15日 5:45

全部回复

  • Hi SZLJH,

      欢迎来到MSDN中文论坛。

      你这个涉及到两个窗体的互相操作或者说互相传值,我建议你阅读我早期的帖子关于这方面的三种办法去解决。

      Child Form to Parent Form Communication 

      这其中强烈建议用增加委托来解决,这样是最适合你这种情况的办法。


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    2013年2月15日 2:43
    版主
  • 谢谢Jason Wang 的回复,感觉传值也麻烦,我在子窗体的下述事件中解决了这一问题:

     private void frmA_Activated(object sender, EventArgs e)
            {
                for (int i = 0; i < this.MdiParent.Controls.Count; i++)
                {
                    if (this.MdiParent.Controls[i] is BindingNavigator)
                    {                    
                        ((BindingNavigator)this.MdiParent.Controls[i]).BindingSource = this.bdsrc;
                    }
                }            
            }//这样,当子窗体被激活时,自动把自己的连接器绑定到父窗体的导航栏控件,从而就可以在父窗体中操纵自己的数据了。


    LJH

    2013年2月15日 5:45