Tabpage动态添加dateGridview后的增,删,改问题(多表) 每次点击一个button,Tabcontrol就添加一个tabpage,再tabpage中添加一个dateGridview,数据都添加完后就有了多个tabpage和多个dateGridview,请问此时如何同时对多个表的同一个字段进行修改,然后再把数据回写到数据库 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 跨页面数据交互:a solution: session 哪里不懂 就是同时对多表更新 adapter.update()方法只能对单表操作吧 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未实例化,咋搞?然后如何将改动后的数据保存到数据库? 你的每一个dataGridView都是针对的多表吗?如果是的话,没什么简单的方法,就像你说的adapter.update是对单表有用...组织sql,一条条记录更新吧... 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]); TO:此时for (int jj = 0; jj < dataGridViewqq.Rows.Count; jj++){dataGridView[j].Rows[jj].Cells[18].Value =0}报错,dataGridViewqq.Rows.Count未实例化,咋搞你的这个dataGridViewqq确实有数据吗?不然怎么会有这个错? 有数据 我上面的数据都是点一下button添加一个dataGridView的,当添加2个或2个以上的时候就报错,只添加一个时候不报错 TO:有数据 我上面的数据都是点一下button添加一个dataGridView的,当添加2个或2个以上的时候就报错,只添加一个时候不报错你这里的2个和2个以一是指的什么?DataGridView吗? 是dataGridView,都是从一个test表里取出的数据,只是where条件不同,现在我只想让dataGridView[j].Rows[jj].Cells[18].Value =0,然后再保存到数据库.问下 是不是我的j定义的有问题,该怎么定义j,因为每次添加完的dataGridView在数组里可能都是dataGridView[0],所以有2个以上dataGridView时候就没有dataGridView[1],dataGridView[2]......不知道对不对 你的DataGridView的数组在怎么定义的? AutoResetEvent、ManualResetEvent能否用于进程通信? 请问如何web页面上取oracle的sequence的数值 关于DataTable的一个疑惑 asp.net2005 怎么引用System.Web.UI.UpdatePanel 异步socket 如何让treeView的节点在单击时就展开? 求正则表达式! 在开发BS系统中,遇到了上传服务器数据的问题, windows metro应用UI界面焦点获得的问题 如何从数据库读写图片?? Socket中接受tcp数据包,怎么让他receive的时候,就接一个数据包? IBatis.NET使用问题
session
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未实例化,咋搞?然后如何将改动后的数据保存到数据库?
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]);