我在项目加添加了一个windows窗体“Wfchild”,窗体中拖入了一个datagridview控件Name是dataGridView1,我用下面的循环语句新开出了三个窗体:www1 、www2 、 www3        int ii = 1;//开的窗体名称WWW加 ii
        private void button9_Click(object sender, EventArgs e)
        {
                    for (int i = 0; i <= 3; i++)
            {
                Wfchild _Wfchild = new Wfchild();
                _Wfchild.Text = "WWW" + ii++;
                _Wfchild.Show();
     
            }
        }我想用主窗体的三个按键,向这三个窗口内的datagridview控件添加datatable数据源"dt1"、"dt2"、"dt3",三个datatable。目前我只知道用button向在同一窗体中的datagridview添加数据:dataGridView1.DataSource = dt1;

解决方案 »

  1.   

    这样动态的show窗体,你只能在show之前把datatable传过去.
    我给你的建议就是
    namespace 测试
    {
        public partial class Form1 : Form
        {
            Form2 _Wfchild1 = new Form2();
            Form2 _Wfchild2 = new Form2();
            Form2 _Wfchild3 = new Form2();        DataTable dt1 = null;
            DataTable dt2 = null;
            DataTable dt3 = null;        public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {          
                _Wfchild1.Text = "WWW1"; 
                _Wfchild1.Show();            _Wfchild2.Text = "WWW2";
                _Wfchild2.Show();            _Wfchild3.Text = "WWW3";
                _Wfchild3.Show();
                      }        private void button2_Click(object sender, EventArgs e)
            {
                _Wfchild1.dataGridView1.DataSource = dt1;
                _Wfchild2.dataGridView1.DataSource = dt2;
                _Wfchild3.dataGridView1.DataSource = dt3;
            }
        }
    }
    在子窗体里面声明dataGridView1 为public我知道的只能是这样了
       看别人怎么说
      

  2.   

    窗体f = new 子窗体();
      f.Owner = this;
      f.ShowDialog();
      if (f.DialogResult == DialogResult.OK)
      {
      //重新绑定
      }
    或委托实现如
    public delegate void SetdataHandler();  public partial class Form1 : Form
      {
      public Form1()
      {
      InitializeComponent();
      }  private void button1_Click(object sender, EventArgs e)
      {
      Form2 frm = new Form2(new SetdataHandler(Setdata));
      frm.Show();
      }  private void Setdata()
      {
      Setdata(this.label1);
      }  private void Setdata(Control control)
      {
      if (this.Controls.Contains(control))
      {
        
      }
      }
      }
    }
    Form2代码C# codenamespace WindowsApplication2
    {
      public partial class Form2 : Form
      {
      private SetdataHandler m_setdata;
      public Form2(SetVisiableHandler setvisible)
      {
      InitializeComponent();
      this.m_setdata = setdata;
      }
      private void btn_Click(object sender, EventArgs e)
      {
      if (this.m_setdata != null)
      {
      this.m_setdata();
      }
      }
      }
      

  3.   

    这是一个用委托向另一窗体控件传值的例子
    主窗体Form1是一个ListBox,单击选中某列时,弹出窗体Form2,Form2中两个控件,一个是TextBox,显示选中的该列的文本,另一个是按钮,点击时将修改后的值回传,且在Form1中修改相应的列的文本,同时Form2关闭。Form2: 
    C#代码  
    //定义一个需要string类型参数的委托   
      
    public delegate void MyDelegate(string text);   
      
    public partial class Form2 :Form1   
        {   
      
           //定义该委托的事件   
            public event MyDelegate MyEvent;   
            public Form2(string text)   
            {    
                InitializeComponent();   
                this.textBox1.Text = text;   
            }   
            private void btnChange_Click(object sender, EventArgs e)   
            {   
      
               //触发事件,并将修改后的文本回传   
                MyEvent(this.textBox1.Text);   
                this.Close();   
            }   
        }  
      Form1: 
    C#代码  
    public partial class Form1 :Form   
        {   
            public int index = 0;   
            public string text = null;   
            public Form1()   
            {   
                InitializeComponent();   
            }   
      
            private void listBox1_SelectedIndexChanged(object sender, EventArgse)   
            {   
                if (this.listBox1.SelectedItem != null)   
                {   
                    text = this.listBox1.SelectedItem.ToString();   
                    index = this.listBox1.SelectedIndex;   
                    Form2 form2 = new Form2(text);   
      
                   //注册form2_MyEvent方法的MyEvent事件   
                    form2.MyEvent += new MyDelegate(form2_MyEvent);   
                    form2.Show();   
                }   
            }   
      
           //处理   
      
            void form2_MyEvent(string text)   
            {   
                this.listBox1.Items.RemoveAt(index);   
                this.listBox1.Items.Insert(index, text);   
            }   
        }