在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("修改成功!");
}
}
}