我们知道,当datagridview指定了数据源datatable之后,设置datagridview的editmode属性可以实现单击编辑的功能(除 EditProgrammatically 之外,所有 DataGridViewEditMode 值都允许用户通过双击单元格来开始编辑该单元格),此时我们在单击某一行某一列时并且修改了该单元格的值时就会动态的反应到数据源中。例如;
[C#] 纯文本查看 复制代码 this.dataGridView1.DataSource = dt;
那么dt中对应的datarow值就会更改,而且该行datarow对应的RowState = Modified,下面我们就可以使用SqlDataAdapter来进行更新操作,sqlada.Update(dt)方法会自动去检索RowState = Modified的行并更新该行至数据库中。 我们这样初始化SqlDataAdapter:
[C#] 纯文本查看 复制代码 SqlCommand cmmd = new SqlCommand("select * from ais order by id desc", DBProc.createConnection());
SqlDataAdapter sqlada = new SqlDataAdapter(cmmd);
在多次调试时,始终会抛异常提示没有设置updatecommand的值,后来百度了一下,发现确实需要赋值,但是.net给了我们一个简单的方法,那就是可以用SqlCommandBuilder类(自动生成单表命令,用于将对 System.Data.DataSet 所做的更改与关联的 SQL Server 数据库的更改相协调),SqlCommandBuilder类会自动生成更新命令,就不必这么麻烦的去手动写命令了。下面是SqlDataAdapter正确的实例代码:
[C#] 纯文本查看 复制代码 public SqlDataAdapter GetMySqldataAdapter()
{ SqlDataAdapter sqlada;
if (sqlada != null)
{
return sqlada;
}
else
{
SqlCommand cmmd = new SqlCommand("select * from ais order by id desc", DBProc.createConnection());
sqlada = new SqlDataAdapter(cmmd);
SqlCommandBuilder scb = new SqlCommandBuilder(sqlada);
sqlada.UpdateCommand = scb.GetUpdateCommand();
}
return sqlada;
}
如果不指定updatecommand会报异常,同时你所绑定的表必须要有主键。
如此在数据进行更改时,我们就可以调用方法sqlada.Update(dt)来进行实时的批量更新操作了。
|