|  
 
 
DataGridView更新数据,关于DataTable的ImportRow 
 DataGridView上更新数据的时候,他是这样做的: 当点击单元格的时候,记录行号 selectIndex.然后新建一个 DataTable origDB,并调用 origDB.ImportRow(updateData) ,其中, updateData 是在DataGridView中修改的,还没有更新到数据库中的数据. 接着用 adapter的 Update方法请求更新. 
我觉得这里是不是为了掩饰  DataTable的 ImportRow而已? 因为我觉得,如果在 DataGridView中修改的数据,只要还原为 DataTable 类型后,直接用 SQLDataAdapter更新不就得了....大家说是吧...  
ImportRow方法只是为了“导入行”操作,就是往DataTable里面增加一行。 private string strConnection = @"Data Source=.\SQLExpress;Initial Catalog=DB_Person;Integrated Security=True";         private SqlConnection connect;         private SqlDataAdapter adapter;         private int selectedRow = 0;  //记录选择的单元格所在行.         private int selectedCol = 0;    //记录选择的单元格所在列.         private DataSet set;    //多次用到的DataSet.         public Form1() {             InitializeComponent();         }         //加载数据.         private void btn_LoadData_Click(object sender, EventArgs e) {             connect = new SqlConnection(strConnection);             SqlCommand cmd = connect.CreateCommand();             cmd.CommandText = "select * from [dbo].[T_Employee]";             adapter = new SqlDataAdapter(cmd);             set = new DataSet();             adapter.Fill(set, "T_Employee");             dataGV.DataSource = set.Tables["T_Employee"];             dataGV.RowHeadersVisible = false;   //行标题不可见.             dataGV.Columns[0].ReadOnly = true;  //序号不可改.         }         //更新数据的方法.         bool UpdateData() {             //注意这里的select 筛选提交要使 oriData 和 updataData 的结构相同.             string strQuery = "select * from [dbo].[T_Employee]";             DataTable oriData = GetDataTable(strQuery); //数据库中的数据.             DataTable updataData = (DataTable)dataGV.DataSource; //修改中显示在DataGridView中的数据.             oriData.Rows.Clear();             oriData.ImportRow(updataData.Rows[selectedRow]);  //获得更新行.             try {                 SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);                 adapter.Update(oriData);    //更新数据.                 //oriData.AcceptChanges();    //提交更新.                 return true;    //此时更新成功.             }             catch(System.Exception ex) {                 MessageBox.Show(ex.Message);                 return false;   //此时更新失败.             }         }         //更新数据.         private void btn_UpdataData_Click(object sender, EventArgs e) {             if(UpdateData())                 MessageBox.Show("更新成功!");             else                MessageBox.Show("更新失败!");             btn_LoadData_Click(sender, e);  //重新加载数据.             dataGV.Rows[selectedRow].Selected = true; //选中刚修改的单元格.         }         //获得DataTable.         DataTable GetDataTable(string strSQL) {             adapter = new SqlDataAdapter(strSQL, connect);             DataTable dt = new DataTable();             adapter.Fill(dt);             return dt;         }         //获取选择行,列.         private void dataGV_CellClick(object sender, DataGridViewCellEventArgs e) {             selectedRow = dataGV.CurrentCell.RowIndex;             selectedCol = dataGV.CurrentCell.ColumnIndex;         } 
 |