每次点击一个button,Tabcontrol就添加一个tabpage,再tabpage中添加一个dateGridview,数据都添加完后就有了多个tabpage和多个dateGridview,请问此时如何同时对多个表的同一个字段进行修改,然后再把数据回写到数据库

解决方案 »

  1.   

    跨页面数据交互:a solution:
         session
      

  2.   

    哪里不懂 就是同时对多表更新   adapter.update()方法只能对单表操作吧
      

  3.   

    int i = this.listBox1.Items.Count;
                    tabpage = new System.Windows.Forms.TabPage[i];
                    dataGridView = new System.Windows.Forms.DataGridView[i];
                    bindingSource = new System.Windows.Forms.BindingSource[i];
                    for (int j = 0; j < i; j++)
                    {
                        tabpage[j] = new TabPage();
                        dataGridView[j] = new DataGridView();
                        bindingSource[j] = new BindingSource();
                        this.tabControl1.Controls.Add(tabpage[j]);
                        tabpage[j].Text = this.listBox1.Items[j].ToString();
                        tabpage[j].Controls.Add(this.dataGridView[j]);
                        dataGridView[j].DataSource = this.bindingSource[j];
                        dataGridView[j].Dock = System.Windows.Forms.DockStyle.Fill;
                        dataGridView[j].AllowUserToAddRows = false;
                        OracleConnection conn = new OracleConnection(Properties.Settings.Default.ConnectionString);
                        OracleCommand cmd = new OracleCommand();
                        cmd.CommandText = "select * from test;
                        cmd.Connection = conn;
                        OracleDataAdapter adapter = new OracleDataAdapter();
                        adapter.SelectCommand = cmd;
                        DataTable dt = new DataTable();
                        adapter.Fill(dt);
                        bindingSource[j].DataSource = dt;
    此时数据是不是已经fill到本地机器的内存里了?此时for (int jj = 0; jj < dataGridViewqq.Rows.Count; jj++){dataGridView[j].Rows[jj].Cells[18].Value =0}报错,dataGridViewqq.Rows.Count未实例化,咋搞?然后如何将改动后的数据保存到数据库?
      

  4.   

    你的每一个dataGridView都是针对的多表吗?如果是的话,没什么简单的方法,就像你说的adapter.update是对单表有用...组织sql,一条条记录更新吧...
      

  5.   

    TO:OracleCommand cmd = new OracleCommand();
                        cmd.CommandText = "select * from test;
                        cmd.Connection = conn;
                        OracleDataAdapter adapter = new OracleDataAdapter();
                        adapter.SelectCommand = cmd;
                        DataTable dt = new DataTable();
                        adapter.Fill(dt);
                        bindingSource[j].DataSource = dt;
    try..
    OracleCommand cmd = new OracleCommand();
                        cmd.CommandText = "select * from test;
                        cmd.Connection = conn;
                        OracleDataAdapter adapter = new OracleDataAdapter();
                        adapter.SelectCommand = cmd;
                        //如果你是单表,且有主键,用CommandBuider
                        OracleCommandBuilder buider =new OracleCommandBuilder(adapter);
                        DataTable dt = new DataTable();
                        adapter.Fill(dt);
                        bindingSource[j].DataSource = dt;......//更新时,直接这样就行了..
    adapter.Update((DataTable)bindingSource[j]);
      

  6.   

    TO:此时for (int jj = 0; jj < dataGridViewqq.Rows.Count; jj++){dataGridView[j].Rows[jj].Cells[18].Value =0}报错,dataGridViewqq.Rows.Count未实例化,咋搞你的这个dataGridViewqq确实有数据吗?不然怎么会有这个错?
      

  7.   

    有数据   我上面的数据都是点一下button添加一个dataGridView的,当添加2个或2个以上的时候就报错,只添加一个时候不报错
      

  8.   

    TO:有数据   我上面的数据都是点一下button添加一个dataGridView的,当添加2个或2个以上的时候就报错,只添加一个时候不报错你这里的2个和2个以一是指的什么?DataGridView吗?
      

  9.   

    是dataGridView,都是从一个test表里取出的数据,只是where条件不同,现在我只想让dataGridView[j].Rows[jj].Cells[18].Value =0,然后再保存到数据库.问下 是不是我的j定义的有问题,该怎么定义j,因为每次添加完的dataGridView在数组里可能都是dataGridView[0],所以有2个以上dataGridView时候就没有dataGridView[1],dataGridView[2]......不知道对不对
      

  10.   

    你的DataGridView的数组在怎么定义的?