10.2.2 更改DataTable中的數據
在DataSet中創建DataTable之後,就可以像對數據庫中的表那樣對DataTable執行操作,如添加、查看、編輯和刪除數據,監視錯誤和事件以及查詢數據等。當修改DataTable中的數據時,可以驗證更改是否準確,並且確定是否可以通過編程方式接受或拒絕更改。
1.插入新行
在創建DataTable並使用列和約束定義其結構後,即可向表中添加新的數據行。
(1)創建一個新行
若要向DataTable添加一新行,首先要聲明一個DataRow類型的變量。當調用NewRow方法時會返回一個新的DataRow對象。然後DataTable根據DataColumnCollection定義的表的結構來創建DataRow對象。
- DataRow drNewEmployee = drEmployees.NewRow();
(2)填充新行
向DataTable添加了新行之後,可以使用索引或列名操作新行。
- DataRow drNewEmployee = drEmployees.NewRow();
- drNewEmployee[0] = 11;
- drNewEmployee[1]="smith";
- drNewEmployee["EmployeeID"] = 11;
- drNewEmployee["EmpName"] = "Smith";
(3)向DataTable追加行
在數據插入到新行後,使用Add方法將該行添加到DataRowCollection中。
- dtEmp]oyees.Rows.Add(drNewEmployee);
(4)使用代碼來創建、填充和追加行
也可以通過將一個Object類型的數組傳遞給Add方法來創建一個新行。
- dtEmployees。Rows.Add(New object(){11,"smith"})
該方法在表中創建新行,並設置其列值爲對象數組中的值。
注意:數組中的值根據它們在表中出現的順序與列匹配。
2.更新表中的數據
DataRow類爲了在編輯數據時掛起和恢復數據行的狀態提供了3個方法:BeginEdit、EndEdit和CancelEdit方法。當編輯數據時,調用BeginEdit可以掛起任何事件(或異常),使用Items集合指定要修改的數據的列名和新值;使用EndEdit重新恢復任何事件(或異常);使用CancelEdit則可以回滾任何更改和重新激活任何事件或異常。
【實例10-2】 修改表中的數據。
下面演示瞭如何使用BeginEdit方法、Items集合和EndEdit方法。
- //獲取Employees表中的第4行數據
- DataRow drEmployee = dtEmployees.Rows[3];
- drEmployee.BeginEdit();
- drEmployee("EmpName") = "John";
- drEmployee("Title")="Sales";
- drEmployee.EndEdit();
3.刪除行
可以使用兩種方法從DataTable對象中刪除DataRow對象:DataRowCollection對象的Remove方法和DataRow對象的Delete方法。Remove方法從DataRowCollection中刪除DataRow;而Delete方法只對刪除的行做標記,通常用於無連接環境中的數據。
(1)Remove方法
如下面的示例代碼所示,DataRowCollection的Remove方法把DataRow當作一個參數並從集合中刪除它。
- DataRow drEmployee = dtEmployees. Rows(3);
- dtEmployees.Rows.Remove(drEmployee);
(2)Delete方法
下面的示例代碼說明了如何調用DataRow的Delete方法將RowState屬性值更改爲Deleted。
- drEmployee Delete();
4.實例分析
製作一個可以向學生成績數據集中添加數據和刪除數據的窗口,在窗體中創建一個新的數據集Ds_Students,並創建一個表Dt_studentList,表結構如圖10-9所示。
示例窗體設計如圖10-10所示。
圖10-9 Dt_studentList結構 |
(點擊查看大圖)圖10-10 示例窗口 |
- private void button1_Click(object sender, System.EventArgs e)
- {
- //添加一新行
- DataRow dr = Dt_studentlist.NewRow();
- //向行的列中添加數據
- dr[0] = t_xh.Text;
- dr[1] = t_xm.Text;
- dr[2] = t_bj.Text;
- dr[3] = t_kc.Text;
- dr[4] = t_lx.Text;
- dr[5] = int.Parse(t_cj.Text);
- dr[6] = int.Parse(t_xh.Text);
- //將新的行添加到DataSet中
- Dt_studentlist.Rows.Add(dr);
- }
"刪除"按鈕代碼如下:
- private void button2_Click(object sender, System.EventArgs e)
- {
- //獲取DataGridView上所選要刪除行的行號
- int index = dataGridView1.SelectedRows[0].Index;
- //找到用戶選定的行
- DataRow dr = Dt_studentlist.Rows[index];
- //刪除該行
- dr.Delete();
- }
【提示】在DataSet中修改數據,不等於在SQL Server數據庫中修改數據。在DataSet中修改數據,相當於在本地內存中的數據庫修改數據,與SQL Server數據庫無關,只有通過SqlDataAdapter將在DataSet中修改的數據更新回SQL Server數據庫,服務器中的數據纔有效。