刚才始接触C#,以前用VFP,不是很习惯。
在一个窗体Form1的dataGridView中显示数据,点新增/修改的时候另外弹出一个窗体Form2(模式表单),然后点保存到SQL SERVER后台。
我现在是在Form1点修改的时候把行赋值给N个变量(用public static),然后在Form2 Load中再赋值给每一个文本框,然后点保存Insert/Update,再刷新dataGridView。
有没有更好的方式,可以直接在Form2 Load读取Form2 dataGridView中行的数据,保存的时候直接刷新dataGridView;另外怎么在新增之后dataGridView自动跳到新增的行上?谢谢。

解决方案 »

  1.   

    其实dataGridView也就是Form1上的一个实例成员变量啊(只是不是Static的)
    所以你可以在打开Form2的时候把Form1的实例引用传递到Form2里去,这样Form2里就可以操作Form1上的public的成员了先能获得新增行的index,然后用DataGridView的相应方法(具体方法名不记得了,但一定有这样一个方法)选中即可
      

  2.   

    可以直接在datagridview里面新增、修改、删除,也可以新建一个窗体来新增修改删除,
    不过我感觉用窗体来新增、修改、删除显得比较专业。
      

  3.   

    可以将欲修改的数据存储到一个结构或类中,然后将该对象传入到修改数据的窗体(FORM2)中,FORM2以对话框显示,FORM2修改完成后,根据FORM2中的修改内容再更新FORM1中的数据.
      

  4.   

    to possible_Y
    怎么样在打开Form2的时候把Form1的实例引用传递到Form2里去,请指教,谢谢!
      

  5.   


    1.构造注入,在Form2的构造上加上一个Form1类型参数
    在Form1里写:
    Form2 f2 = new Form2(this);2.setter或方法注入,在Form2增加一个可写的属性或方法来设置Form2 f2 = new Form2();
    f2.RelationForm = this; // 或f2.SetRelationForm(this);
      

  6.   

    这样做是比较方便,但是缺点是Form1和Form2耦合在一起了,如果一旦你的Form1的UI元素发生变化,那么Form2也要做修改.
    那么可以像zhgroup说的,做一个中间的数据载体来传递数据,这样可以解除Form1和Form2之间的偶尔,各自都只用关心操作这个中间的数据载体,而且还可以重用.当然这样做的代价就是麻烦点,要多写些代码.至于用哪种方式,需要你自己根据实际情况来权衡.