DataTable的AcceptChanges()和RejectChanges()方法介紹并實現DataGridView數據增、刪、改_第1頁
DataTable的AcceptChanges()和RejectChanges()方法介紹并實現DataGridView數據增、刪、改_第2頁
DataTable的AcceptChanges()和RejectChanges()方法介紹并實現DataGridView數據增、刪、改_第3頁
DataTable的AcceptChanges()和RejectChanges()方法介紹并實現DataGridView數據增、刪、改_第4頁
DataTable的AcceptChanges()和RejectChanges()方法介紹并實現DataGridView數據增、刪、改_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第DataTable的AcceptChanges()和RejectChanges()方法介紹并實現DataGridView數據增、刪、改一、DataTable.AcceptChanges()方法

提交自上次調用AcceptChanges()方法以來對該表進行的所有更改。調用AcceptChanges()時,任何扔處于編輯模式的DataRow對象將成功結束其編輯。DataRowState也會隨之更改:所有狀態(tài)為Added何Modified的行的狀態(tài)都變?yōu)閁nchanged;狀態(tài)為Deleted的行則被移除。

在嘗試使用DbDataAdapter.Update方法更新DataSet之后,通常會對DataTable調用AcceptChanges方法。

二、DataTable.RejectChanges()方法

回滾自該表加載以來或上次調用AcceptChanges()以來對該表進行的所有更改。調用RejectChanges時,任何扔處于編輯模式的DataRow對象將取消其編輯。新行被移除。DataRowState設置為Modified或Deleted的行返回到其初始狀態(tài)。

使用Delete()方法后,RowState變成Deleted狀態(tài)。在您調用AcceptChanges之前,它一直保持Deleted狀態(tài)??赏ㄟ^調用RejectChanges取消刪除行。

用于從DataTable對象中刪除DataRow對象的方法有兩種:DataRowCollection對象的Remove()方法和DataRow對象的Delete()方法。Rwmove()方法從DataRowCollection中刪除DataRow,而Delete()方法只是將行的狀態(tài)標記為刪除,當應用程序調用AcceptChanges()方法時,才會發(fā)生實際的刪除。通過使用Delete()方法,您可以在實際刪除之前先以編程的方式檢查哪些行標記為刪除。

在將DataSet或DataTable與DataAdapter和關系型數據源一起使用時,用DataRow的Delete方法移除行。Delete方法只是在DataSet或DataTable中將行標記為Deleted,而不會移除它。而DataAdapter在遇到標記為Deleted的行時,會執(zhí)行其DeleteCommand方法以在數據源中刪除該行。然后,就可以用AcceptChanges方法永久移除該行。如果使用Remove刪除該行,則該行將從表中完全移除,但DataAdapter不會在數據源中刪除該行。

三、項目示例

1、界面設計

2、代碼實現

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

usingSystem.Windows.Forms;

usingSystem.Data;

usingSystem.Data.SqlClient;

usingSystem.Configuration;

namespaceDataRowStateDemo

publicpartialclassFrmMain:Form

publicFrmMain()

InitializeComponent();

//連接字符串

stringstrConn=ConfigurationManager.ConnectionStrings["DbConn"].ConnectionString;

///summary

///加載

////summary

///paramname="sender"/param

///paramname="e"/param

privatevoidbtn_LoadData_Click(objectsender,EventArgse)

Initdgv();

this.btn_Add.Visible=false;

///summary

///初始化DataGridView

////summary

privatevoidInitdgv()

SqlConnectionconn=newSqlConnection(strConn);

stringstrSQL="select*fromUsers";

SqlCommandcmd=newSqlCommand(strSQL,conn);

SqlDataAdapteradapter=newSqlDataAdapter(cmd);

DataSetdsDgv=newSystem.Data.DataSet();

conn.Open();

//填充數據

adapter.Fill(dsDgv);

this.dgv_Demo.DataSource=dsDgv.Tables[0];

//不顯示最后的空行

this.dgv_Demo.AllowUserToAddRows=false;

//設置第一列只讀

this.dgv_Demo.Columns[0].ReadOnly=true;

catch(Exceptionex)

finally

conn.Close();

///summary

///編輯

////summary

///paramname="sender"/param

///paramname="e"/param

privatevoidbtn_Edit_Click(objectsender,EventArgse)

this.dgv_Demo.AllowUserToAddRows=true;

///summary

///保存

////summary

///paramname="sender"/param

///paramname="e"/param

privatevoidbtn_Save_Click(objectsender,EventArgse)

DataTabledtCopy=this.dgv_Demo.DataSourceasDataTable;

DataSetdsUsers=newDataSet();

//產生與表Users結構相同的空表

DataTabledtAdd=GetEmptyTable();

DataTabledtEdit=GetEmptyTable();

DataTabledtDel=GetEmptyTable();

//根據DataRowState的狀態(tài)獲取新增、修改、刪除的表數據

dtAdd=dtCopy.GetChanges(DataRowState.Added);

dtEdit=dtCopy.GetChanges(DataRowState.Modified);

dtDel=dtCopy.GetChanges(DataRowState.Deleted);

//新增

if(dtAdd!=null)

dtAdd.TableName="Added";

dsUsers.Tables.Add(dtAdd);

//修改

if(dtEdit!=null)

dtEdit.TableName="Edit";

dsUsers.Tables.Add(dtEdit);

//刪除

if(dtDel!=null)

dtDel.TableName="Del";

dtDel.RejectChanges();

dsUsers.Tables.Add(dtDel);

//保存數據

if(SaveUser(dsUsers))

MessageBox.Show("保存成功!");

//重新加載數據

Initdgv();

else

MessageBox.Show("保存失敗!");

///summary

///根據表結構產生空表

////summary

///returns/returns

privateDataTableGetEmptyTable()

DataTabledtTable=newDataTable("Users");

//使用集合初始化器添加列

dtTable.Columns.AddRange(newDataColumn[]{

newDataColumn("UserID",typeof(Int32)),

newDataColumn("UserName",typeof(string)),

newDataColumn("Password",typeof(string)),

newDataColumn("Sex",typeof(Char)),

newDataColumn("Birthday",typeof(DateTime))

returndtTable;

///summary

///保存數據

////summary

///paramname="ds"/param

///returns/returns

privateboolSaveUser(DataSetds)

booltf=false;

//新增

if(ds.Tables["Added"]!=null)

foreach(DataRowdrinds.Tables["Added"].Rows)

tf=InsertUser(dr);

//修改

if(ds.Tables["Edit"]!=null)

foreach(DataRowdrinds.Tables["Edit"].Rows)

tf=UpdateUser(dr);

//刪除

if(ds.Tables["Del"]!=null)

foreach(DataRowdrinds.Tables["Del"].Rows)

tf=DeleteUser(dr);

returntf;

///summary

///數據庫增加

////summary

///paramname="drDataRow"/param

///returns/returns

privateboolInsertUser(DataRowdrDataRow)

stringstrSQL=string.Format(@"insertintousersvalues('{0}','{1}','{2}','{3}')",drDataRow["UserName"].ToString(),drDataRow["Password"].ToString(),drDataRow["Sex"].ToString(),drDataRow["Birthday"].ToString());

returnExecuteSQL(strSQL);

///summary

///數據庫刪除

////summary

///paramname="drDataRow"/param

///returns/returns

privateboolDeleteUser(DataRowdrDataRow)

stringstrSQL=string.Format("deletefromuserswhereUserID='{0}'",Convert.ToInt32(drDataRow["UserID"].ToString()));

returnExecuteSQL(strSQL);

///summary

///數據庫修改

////summary

///paramname="drDataRow"/param

///returns/returns

privateboolUpdateUser(DataRowdrDataRow)

stringstrSQL=string.Format("updateuserssetUserName='{0}',Password='{1}',Sex='{2}',Birthday='{3}'whereUserID='{4}'",

drDataRow["UserName"].ToString(),drDataRow["Password"].ToString(),drDataRow["Sex"].ToString(),

drDataRow["Birthday"].ToString(),Convert.ToInt32(drDataRow["UserID"].ToString()));

returnExecuteSQL(strSQL);

///summary

///數據庫執(zhí)行SQL語句

////summary

///paramname="strSQL"/param

///returns/returns

privateboolExecuteSQL(stringstrSQL)

booltfResult=false;

SqlConnectionconn=newSqlConnection(strConn);

SqlCommandcmd=newSqlCommand(strSQL,conn);

conn.Open();

tfResult=cmd.ExecuteNonQuery().Equals(1);

catch(Exceptionex)

finally

conn.Close();

returntfResult;

///summary

///刪除

////summary

///paramname="sender"/param

///paramname="e"/param

privatevoidbt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論