在DataGridView控件中修改数据,主要用到DataTable的ImportRow方法和DataAdapter对象的Update方法。实现的过程是通过DataTable的ImportRow方法将更改后的数据复制到一个DataTable中,然后通过DataAdapter对象的Update方法,将DataTable中的数据更新到数据库中。
ImportRow方法用于将DataRow复制到DataTable中,且保留任何属性设置以及初始值和当前值。
语法如下:
Public void ImportRow( DataRow row )
其中,row是要导入的DataRow。
默认情况下,用户可以通过在当前的DataGridView文本框单元格中输入或按F2键来编辑该单元格的内容。在控件单元格中编辑内容的前提是DataGridView控件已启用以及单元格、行、列和控件的ReadOnly属性都设置为false。ReadOnly属性用于指示用户是否可以编辑DataGridView控件的单元格。
下面演示如何在DataGridView控件中直接修改数据,然后进行批量更新。
public partial class Form1 : Form{
public Form1(){
InitializeComponent();
}
SqlConnection sqlCon; //声明一个SqlConnection变量
SqlDataAdapter adapter; //声明一个SqlDataAdapter变量
//--------------连接数据库,绑定DataGridView控件-----------------
private voidbutton1_Click(object sender, EventArgs e){
//实例化SqlConnection变量conn,连接数据库
sqlCon =new SqlConnection("server=.;database=db_16;uid=sa;pwd=");
//实例化SqlDataAdapter对象
SqlDataAdapter sda = newSqlDataAdapter("select* from tb_emp", sqlCon);
//实例化DataSet对象
DataSet ds = new DataSet();
//使用SqlDataAdapter对象的Fill方法填充DataSet
sda.Fill(ds);
//设置dataGridView1控件的数据源
dataGridView1.DataSource = ds.Tables[0];
//禁止显示行标题
dataGridView1.RowHeadersVisible = false;
//使用for循环设置控件的列宽
for (int i = 0; i< dataGridView1.ColumnCount;i++ ){
dataGridView1.Columns[i].Width = 84;
}
//禁用按钮
button1.Enabled = false;
//将控件设置为只读
dataGridView1.Columns[0].ReadOnly = true;
}
//-----------------建立一个DataTable的方法-----------------------
private DataTabledbconn(string strSql){
sqlCon.Open(); //打开连接
//实例化SqlDataAdapter对象
this.adapter = new SqlDataAdapter(strSql, sqlCon);
//实例化DataTable对象
DataTable dtSelect = newDataTable();
//使用Fill方法填充DataTable对象
int rnt = this.adapter.Fill(dtSelect);
//关闭连接
sqlCon.Close();
//返回DataTable对象
returndtSelect;
}
//-------------更新数据库----------------------------
private BooleandbUpdate(){
//声明SQL语句
string strSql = "select* from tb_emp";
//实例化DataTable
DataTable dtUpdate = newDataTable();
//创建一个DataTable
dtUpdate= this.dbconn(strSql);
//调用Clear方法
dtUpdate.Rows.Clear();
//实例化DataTable
DataTable dtShow = newDataTable();
dtShow =(DataTable)this.dataGridView1.DataSource;
//使用for循环遍历行
for (int i = 0; i< dtShow.Rows.Count; i++){
//使用ImportRow方法复制dtShow中的值
dtUpdate.ImportRow(dtShow.Rows[i]);
}
try{
this.sqlCon.Open(); //打开连接
SqlCommandBuilder CommandBuiler; //声明SqlCommandBuilder变量
CommandBuiler = new SqlCommandBuilder(this.adapter);
this.adapter.Update(dtUpdate); //调用Update方法更新数据库
this.sqlCon.Close(); //关闭连接
}
catch (Exceptionex){
MessageBox.Show(ex.Message.ToString());
return false;
}
//提交更改
dtUpdate.AcceptChanges();
return true;
}
//--------------------修改DataGridView控件中选中单元格的值-------------------
private voidbutton2_Click(object sender, EventArgs e){
if (dbUpdate())
{
MessageBox.Show("修改成功!");
}
}
}