天天看點

更改DataTable中的資料

更改DataTable中的資料

在DataSet中建立DataTable之後,就可以像對資料庫中的表那樣對DataTable執行操作,如添加、檢視、編輯和删除資料,監視錯誤和事件以及查詢資料等。當修改DataTable中的資料時,可以驗證更改是否準确,并且确定是否可以通過程式設計方式接受或拒絕更改。

1.插入新行

在建立DataTable并使用列和限制定義其結構後,即可向表中添加新的資料行。

(1)建立一個新行

若要向DataTable添加一新行,首先要聲明一個DataRow類型的變量。當調用NewRow方法時會傳回一個新的DataRow對象。然後DataTable根據DataColumnCollection定義的表的結構來建立DataRow對象。

  1. DataRow drNewEmployee = drEmployees.NewRow(); 

(2)填充新行

向DataTable添加了新行之後,可以使用索引或列名操作新行。

  1. DataRow drNewEmployee = drEmployees.NewRow();  
  2. drNewEmployee[0] = 11;  
  3. drNewEmployee[1]="smith";  
  4. drNewEmployee["EmployeeID"] = 11;  
  5. drNewEmployee["EmpName"] = "Smith"; 

(3)向DataTable追加行

在資料插入到新行後,使用Add方法将該行添加到DataRowCollection中。

  1. dtEmp]oyees.Rows.Add(drNewEmployee); 

(4)使用代碼來建立、填充和追加行

也可以通過将一個Object類型的數組傳遞給Add方法來建立一個新行。

  1. dtEmployees。Rows.Add(New object(){11,"smith"}) 

該方法在表中建立新行,并設定其列值為對象數組中的值。

注意:數組中的值根據它們在表中出現的順序與列比對。

2.更新表中的資料

DataRow類為了在編輯資料時挂起和恢複資料行的狀态提供了3個方法:BeginEdit、EndEdit和CancelEdit方法。當編輯資料時,調用BeginEdit可以挂起任何事件(或異常),使用Items集合指定要修改的資料的列名和新值;使用EndEdit重新恢複任何事件(或異常);使用CancelEdit則可以復原任何更改和重新激活任何事件或異常。

【執行個體10-2】  修改表中的資料。

下面示範了如何使用BeginEdit方法、Items集合和EndEdit方法。

  1. //擷取Employees表中的第4行資料  
  2. DataRow drEmployee = dtEmployees.Rows[3];  
  3. drEmployee.BeginEdit();  
  4. drEmployee("EmpName") = "John";  
  5. drEmployee("Title")="Sales";  
  6. drEmployee.EndEdit(); 

3.删除行

可以使用兩種方法從DataTable對象中删除DataRow對象:DataRowCollection對象的Remove方法和DataRow對象的Delete方法。Remove方法從DataRowCollection中删除DataRow;而Delete方法隻對删除的行做标記,通常用于無連接配接環境中的資料。

(1)Remove方法

如下面的示例代碼所示,DataRowCollection的Remove方法把DataRow當作一個參數并從集合中删除它。

  1. DataRow drEmployee = dtEmployees. Rows(3);  
  2. dtEmployees.Rows.Remove(drEmployee); 

(2)Delete方法

下面的示例代碼說明了如何調用DataRow的Delete方法将RowState屬性值更改為Deleted。

  1. drEmployee Delete(); 

4.執行個體分析

制作一個可以向學生成績資料集中添加資料和删除資料的視窗,在窗體中建立一個新的資料集Ds_Students,并建立一個表Dt_studentList,表結構如圖10-9所示。

示例窗體設計如圖10-10所示。

更改DataTable中的資料
圖10-9  Dt_studentList結構
更改DataTable中的資料
(點選檢視大圖)圖10-10  示例視窗

"添加"按鈕代碼如下:

  1. private void button1_Click(object sender, System.EventArgs e)  
  2. {  
  3.     //添加一新行  
  4.      DataRow dr = Dt_studentlist.NewRow();  
  5.      //向行的列中添加資料  
  6.      dr[0] = t_xh.Text;  
  7.      dr[1] = t_xm.Text;  
  8.      dr[2] = t_bj.Text;  
  9.      dr[3] = t_kc.Text;  
  10.      dr[4] = t_lx.Text;  
  11.      dr[5] = int.Parse(t_cj.Text);  
  12.      dr[6] = int.Parse(t_xh.Text);  
  13.      //将新的行添加到DataSet中  
  14.      Dt_studentlist.Rows.Add(dr);  

"删除"按鈕代碼如下:

  1. private void button2_Click(object sender, System.EventArgs e)  
  2. {  
  3.     //擷取DataGridView上所選要删除行的行号  
  4.      int index = dataGridView1.SelectedRows[0].Index;  
  5.      //找到使用者標明的行  
  6.      DataRow dr = Dt_studentlist.Rows[index];  
  7.      //删除該行  
  8.      dr.Delete();  

【提示】在DataSet中修改資料,不等于在SQL Server資料庫中修改資料。在DataSet中修改資料,相當于在本地記憶體中的資料庫修改資料,與SQL Server資料庫無關,隻有通過SqlDataAdapter将在DataSet中修改的資料更新回SQL Server資料庫,伺服器中的資料才有效。