更改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資料庫,伺服器中的資料才有效。