
dataGridView更改数据
无法将类型为“S无法将类型为“System.Windows.Forms.BindingSource”的对象强制转换为类型“System.Data.DataTable”。?...
无法将类型为“S
无法将类型为“System.Windows.Forms.BindingSource”的对象强制转换为类型“System.Data.DataTable”。? 我用的access数据库 数据类型OleDbType.WChar,学的SQL,没学过access不知道为什么不能转换呢···
dataGridView1.EndEdit();
OleDbDataAdapter Ada = new OleDbDataAdapter();
DataTable table = (DataTable)dataGridView1.DataSource;
// DataTable table = ((DataView)dataGridView1.DataSource).ToTable();
String ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "$safeprojectname$ Order Management.accdb"; using (OleDbConnection connection = new OleDbConnection(ConnectionString)) { Ada.SelectCommand = new OleDbCommand("SELECT * FROM 类别", connection); OleDbCommandBuilder builder = new OleDbCommandBuilder(Ada); Ada.UpdateCommand = builder.GetUpdateCommand(); try { Ada.Update(table); table.AcceptChanges(); MessageBox.Show("操作已成功!数据将全部被保存......", "系统消息", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); } catch (System.Data.OleDb.OleDbException ex) { throw new Exception(ex.Message); } } } 展开
无法将类型为“System.Windows.Forms.BindingSource”的对象强制转换为类型“System.Data.DataTable”。? 我用的access数据库 数据类型OleDbType.WChar,学的SQL,没学过access不知道为什么不能转换呢···
dataGridView1.EndEdit();
OleDbDataAdapter Ada = new OleDbDataAdapter();
DataTable table = (DataTable)dataGridView1.DataSource;
// DataTable table = ((DataView)dataGridView1.DataSource).ToTable();
String ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "$safeprojectname$ Order Management.accdb"; using (OleDbConnection connection = new OleDbConnection(ConnectionString)) { Ada.SelectCommand = new OleDbCommand("SELECT * FROM 类别", connection); OleDbCommandBuilder builder = new OleDbCommandBuilder(Ada); Ada.UpdateCommand = builder.GetUpdateCommand(); try { Ada.Update(table); table.AcceptChanges(); MessageBox.Show("操作已成功!数据将全部被保存......", "系统消息", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2); } catch (System.Data.OleDb.OleDbException ex) { throw new Exception(ex.Message); } } } 展开
1个回答
展开全部
//我晕,那么乱代码你是怎么写出来的啊
//去掉这行 DataTable table = (DataTable)dataGridView1.DataSource;
//你错误应该是上面语句强制转换为DataTable时报错的,原因可能是dataGridView1.DataSource的数据源不是datatable
//换成我下面的方法看看行不行
String ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "$safeprojectname$ Order Management.accdb";
using (OleDbConnection connection = new OleDbConnection(ConnectionString))
{
try
{
OleDbDataAdapter Bada = new OleDbDataAdapter("SELECT * FROM 类别 WHERE 1=2", connection);
OleDbCommandBuilder cb = new OleDbCommandBuilder(Bada);
cb.QuotePrefix = "[";
cb.QuoteSuffix = "]";
DataSet ds = new DataSet();
Bada.Fill(ds, "demo");
foreach (DataRow tempRow in this.dataGridView1.Rows)
{
DataRow dr = ds.Tables["demo"].NewRow();
dr.ItemArray = tempRow.ItemArray;
ds.Tables["demo"].Rows.Add(dr);
}
if (Bada.Update(ds, "demo") > 0)
{
MessageBox.Show("操作已成功!数据将全部被保存......", "系统消息", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2);
}
}
catch (Exception)
{
}
}
追问
//执行到这就跳出来了,我设置了断点,不继续往下执行了,数据也没修改成功···
foreach (DataRow tempRow in this.dataGridView1.Rows)
//foreach这不执行,
追答
把你项目压缩发我邮箱看下
1720406057@qq.com
或者你想办法把datagridview的数据放进DatatTable,然后改
foreach (DataRow tempRow in this.dataGridView1.Rows)
为
foreach (DataRow tempRow in DataTable)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询