首先呢   我有3个Form  Form1为主页面  Form2 3 都是panel里面的2个Form   
         Form1里面有2个Button分别打开Form2 3
         Form2 3里面分别都有1个datagridview 
         通过OLEDB打开一个Access文件里面的2个不同的表(表1 表2)        OleDbConnection coon = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=XXXOOO.mdb");
datagridview不直接绑定数据源  通过Oledb来打开。。(如果这个问题解决不了的话  我会试着绑定数据源的)
接着    我需要的功能是      通过Button1打开Form2   显示出表1的内容   我在datagridview里面输入数据后  不保存入
        表里       我想在打开Form3时  点击Button1打开回Form2   那么之前输入的数据会依然显示在Form2的表里  
问题就是上面的    重复通过Button打开Form2 和Form3   如果不将数据保存入表中  那么数据就不能保存在打开的        
                  datagridview里面国际惯例= =   满分送上~~~~

解决方案 »

  1.   

    几种办法:
    1、将你的数据源设置成系统全局的变量(可能是dataset),每次在新打开的窗体关闭的时候将值赋给全部变量,以后每次打开的时候再重新赋值
    2、将新窗口中的数据源在关闭的时候保存到本地,可直接调用dataset.writexml方法,下次再重新read进来
    3、以上两种办法都不如你直接写进表里,既然要保存数据,直接写进表里比你再多一些别的操作更加简单。
      

  2.   


    我说的功能就好像是office里面的几个软件一样    不保存的话 也可以显示给客户看。。写进表里的话  下次打开这个表 那么不需要的数据就会显示出来  这样好像不怎么好。
    回复li365941471大大监控类么。。我去找找。。
      

  3.   


      using System;
    using System.Data;  
        class Store
        {
            private static  DataTable _dt;        public static DataTable DT
            {
                set { _dt = value; }
                get { return _dt; }
            }    }绑定dataGridView 的时候if (Store.DT != null)
                {
                    dataGridView1.DataSource = Store.DT;
                }
                else
                {
                    using (SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=root;database=test"))
                    {
                        try
                        {
                            SqlDataAdapter da = new SqlDataAdapter("select * from [DataGridViewDemoTable]", con);
                            DataSet ds = new DataSet();
                            da.Fill(ds, "DataGridViewDemoTable");
                            if (ds.Tables.Contains("DataGridViewDemoTable"))
                            {
                                dataGridView1.DataSource = ds.Tables["DataGridViewDemoTable"];
                            }
                        }
                        catch (DataException de)
                        {                    }
                    }
                }窗体关闭的时候Store.DT = dataGridView1.DataSource as DataTable;
      

  4.   

    Sandy945大大  我把你的绑定datagridview的那段代码输进CellEndEdit事件里面  然后运行 
    输入数据后打开第二个Form的时候就显示出dataGridView1.DataSource = ds.Tables["DataGridViewDemoTable"];操作无效,原因是它导致对 SetCurrentCellAddressCore 函数的可重入调用。还是说我输错了事件?
      

  5.   

    绑定是在 load 事件中的
      

  6.   

    绑定数据源写在Form2_load里面,然后在Form2_colse里写dataset.ApplyUpdates();//提交所做的修改到dataset中去.dataset是保存在本地内存中的不会提交到数据库中,所以你下次再打开Form2时,把GridView1.DataSource=dataset;就行了.dataset 声明在主程序Form1中,设置为static静态变量,声明在Form2中的话,Form2关闭的时候会释放掉内存中的dataset
      

  7.   

    啊啊啊   灰常感谢Sandy945大大的代码和xiao_jun_0820大大的指导
    在这里灰常感谢2位= = 首先呢  Sandy945大大的代码功不可没= =  加上之前的指导   鞠躬~接着呢  xiao_jun_0820大大的指导更素指点了迷灯~~~  再鞠躬。。同时和Sandy945大大说   Store.DT = dataGridView1.DataSource as DataTable;
    这个只要放在Load下面就可以了 这样切换Form的时候  就可以把之前存在当地内存的数据再现出来。再和 xiao_jun_0820大大 说  其实dataset可以定义在类中的。3鞠躬  谢谢2位= =  结贴~!
      

  8.   

     窗体关闭的时候Store.DT= dataGridView1.DataSourceas DataTable;