form1里面定义了一个datagridview 里面有n行数据
form1里面有个方法private void rowsnum(){messagebox.show(datagridview1.rows.count.tostring());}
from2 里面有一个按钮
按钮的点击事件里调用rosnum()但是显示的行数是0  而如果在form1里面调用这个方法显示的行数又是正确的 
我的问题是怎么才能在form2里面读取到form1的行数
private void button1_Click(object sender, EventArgs e)
        {
            Form1 frm = new Form1();
            int flag=frm.Insert();
            if (flag == 1)
            { this.Close(); }form1里德方法
 public  int Insert()
        { 
for (int k = 0; k < dataGridView1.Rows.Count; k++)
                {                   }
}注意 for (int k = 0; k < dataGridView1.Rows.Count; k++)
后面没有执行 因为调试得知dataGridView1.Rows.Count始终为0

解决方案 »

  1.   

    new f1实例后 你可以通过f1找到f1里的datagrideview直接.rows.count.tostring()
      

  2.   

    Form1 frm = new Form1();确定在初始化frm的时候有给frm的datagridview1加数据么,没加的话,你new个Form1出来,datagridview1也只会是空的。
      

  3.   

    补充 :有人说是我在form2里new form1后 新声明出来的就是一个新的对象,和原来的form1是两个不同的东西。
      

  4.   


    人家说的是对,你的要把前面已经操作过表格的form传入form2中,然后调用行数才对。应该对象不同了,对应的内存地址肯定不同了。
      

  5.   

    我之前也遇见过类似的问题
    这样就解决了
    在form2里  
      Form1 mainform;
      public Form2(Form1 mainf)
            {
                InitializeComponent();
                this.mainform = mainf;
            }
    form1里弹出form2时这样写:
    Form2.show(this);
      

  6.   

    同学,这肯定不是同一个东西啦,如果你想要原来的form1,那就把form1当参数往form2的构造方法里传,这样再用个变量Form1 frm ;
    public class frm2:Form2
    {
       private Form1 frm;//加个变量用来接收Form1
        public frm2(Form1 frm)
        {
        this.frm=frm;// 用变量frm接收Form1实例的引用    }
    private void button1_Click(object sender, EventArgs e)
      {
        int flag=this.frm.Insert();
        if (flag == 1)
        { this.Close(); }
    }
      

  7.   

    晕,搞半天你调用的不是同一个窗口的rowsnum