form1上有DataSet,DataGridView 如果在DataGridView双击某一行,则在另一Form上显示明细的内容,部份代码如下:
       private void Form2_Load(object sender, EventArgs e)
        {
            Form1 frm1=new Form1();
            DataTable adt=frm1.frontDeskDataSet.Tables[0];
            //textBox1.Text = adt.Rows[0][1].ToString();  //运行到此句出错
            MessageBox.Show(adt.Rows.Count.ToString());   //检测到行数为0
        }
在form1中的DateSet的Modifiers已置为public
请问应该如何写?
 

解决方案 »

  1.   

    在form2上添加属性,form1中给form2属性赋值.
      

  2.   

    你可以写个类  当调用另一个form 时 把 dataset 赋给那个类 。然后在 那个form中调 写的类 
    仅供参考 。看楼下 有没有好的办法
      

  3.   

    Public string ShowText;
    form2
    void form_load(....)
    {
        MessageBox.Show(ShowText);
    }form1 
    Form form2=new Form()
    form2.ShowText="your value";
    form1.show();
      

  4.   

    你这样写应该是出不来的,因为你这个frm1是重新new出来的Form1,而不是已经存在的那个Form1;
    Form1 frm1=new Form1(); 
    改成Form1 frm1 = (Form1)(Application.OpenForms["Form1"]);
    if(frm1 != null)
    {
                DataTable adt=frm1.frontDeskDataSet.Tables[0]; 
                //textBox1.Text = adt.Rows[0][1].ToString();  //运行到此句出错 
                MessageBox.Show(adt.Rows.Count.ToS…}试一下
      

  5.   

    DataTable adt=frm1.frontDeskDataSet.Tables[0]; 这行代码放断点,看看adt是否为NULL
    不是NULL,则看看adt有几个列字段,这是简单数据传递问题,
    方法可以参考1楼, 
      

  6.   

    lz这样的方法也是可以的 不过
    Form1 frm1=new Form1(); 这句有问题
    这样写是新new出来一个Form1而不是抓的已经存在的那个Form1
    换成
    Form1 frm1 = (Form1)(Application.OpenForms["Form1"]);或者在Form2构造函数里接值
    在new Form2的时候就把值传过去
      

  7.   

    那你就form2写个构造函数
            DataGridView dgv = null;
            public Form1(DataGridView dgv1)
            {
                dgv = dgv1;
            }
              
            private void Form2_Load(object sender, EventArgs e) 
            { 
                DataTable adt=dgv.DataSource as DataTable; 
                //textBox1.Text = adt.Rows[0][1].ToString();  //运行到此句出错 
                MessageBox.Show(adt.Rows.Count.ToString());  //检测到行数为0 
            }
     
      

  8.   

    按照6楼的写法问题已解决 
           private void Form2_Load(object sender, EventArgs e)
            {
               // Form1 frm1=new Form1();
                Form1 frm1 = (Form1)(Application.OpenForms["Form1"]);   //6楼的写法
                DataTable adt=frm1.frontDeskDataSet.Tables[0];
                textBox1.Text = adt.Rows[RowNo]["RecordedDate"].ToString(); //其中的RowNo是在Form2生成的时候通过构造函数传进来的
                MessageBox.Show(adt.Rows.Count.ToString());
                MessageBox.Show(adt.TableName.ToString());
            }
      

  9.   

    在form1调用时,也就是在DataGridView双击事件里把控件1传过去。前提还要把
    DataGridView公开publicForm2 f2=new Form2(this.dataGridView1);
    f2.Show();
      

  10.   

     DataGridView dgv = null;
            public Form2(DataGridView dgv1)
            {
                dgv = dgv1;
            }
              
            private void Form2_Load(object sender, EventArgs e) 
            { 
                DataTable adt=dgv.DataSource as DataTable; 
                //textBox1.Text = adt.Rows[0][1].ToString();  //运行到此句出错 
                MessageBox.Show(adt.Rows.Count.ToString());  //检测到行数为0 
            }
    改一下