若要在DataGrid控制項中編輯數據,請使用"按鈕列"中的"編輯、更新、取消"列,這些都可以在DataGrid控制項的屬性產生器中設定
當為DataGrid控制項(以控制項名為dg1為例)中加入了"編輯、更新、取消"列後,在頁面的dg1控制項中會多出一列,該列的每一項都是文字為"編輯"的LinkButton/Button。
如果點選了某一行的"編輯"按鈕,則該行處於編輯模式,"編輯"按鈕被替換為"更新"和"取消"按鈕,該行中所有其它的非唯讀的資料幫定列都會變成TextBox控制項格式,以便使用者來編輯修改。
當使用者修改了非唯讀的資料幫定列的資料(在TextBox控制項),點選"更新"按鈕,將新值儲存(一般是儲存到資料庫),點選"取消"按鈕,該行退出編輯模式。
為了達到點選"編輯"按鈕,就轉換為行編輯模式的效果,必須編寫dg1的EditCommand事件處理方法為了達到點選"更新"按鈕,就儲存新值的效果,必須編寫dg1的UpdateCommand事件處理方法為了達到點選"取消"按鈕,就退出行編輯模式,必須編輯dg1的CancelCommand事件處理方法
1) dg1.EditCommand事件處理方法-進入行的編輯模式
-------------------------------------------------- ----
private void dg1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
dg1.EditItemIndex = e.Item.ItemIndex; //設定要編輯的項目的索引
binddg1(); //為dg1綁定資料的方法。設定要編輯的項目後,要求重新綁定dg1
}
-------------------------------------------------- -------
2) dg1.CancelCommand事件處理方法-退出行的編輯模式
-------------------------------------------------- -------
private void dg_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
dg1.EditItemIndex = e.Item.ItemIndex; //編輯的項目的索引為-1,就是不編輯任何項
binddg1(); //重設EditItemIndex後,要求重新綁定dg1
}
-------------------------------------------------- -------
3) dg1.UpdateCommand事件處理方法-儲存更新了的值要儲存更新了的值,首先要重頁面中取得這些新值。在事件處理方法中,主要要實作三個功能:
取得更新了的值、更新這些值、退出行更新模式。
一般,DataGrid控制項中的顯示的資料都是從資料庫表中取得的,所以更新了的值也要儲存到資料庫中,可以用一條update Sql語句或預存程序來執行更新。
要從頁面中取得處於編輯模式的行中各列的值,需要一些技巧。以綁定列為例:
取得唯讀綁定列的值: e.Item.Cells[列索引].Text //只讀幫定列處於非編輯狀態取得非唯讀綁定列的值:((TextBox)(e.Item. Cells[列索引].Controls[0])).Text //處於編輯狀態
只讀幫定列通常是表中的主鍵列,其列值要用在update語句的where子句中,一般不更新它們
程式碼範例:
-------------------------------------------------- --------
private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
//只讀綁定列,處於非編輯狀態
string customerid = e.Item.Cells[1].Text;
//非唯讀綁定列,處於編輯狀態
string companyname = ((TextBox)(e.Item.Cells[2].Controls[0])).Text;
string city = ((TextBox)(e.Item.Cells[3].Controls[0])).Text;
String strSql = "update customers set companyname = '" + companyname +
"',city = '" + city + "' where customerid = '" + customerid + "'";
executeSql(strSql); //執行update語句,進行更新
DataGrid1.EditItemIndex = -1; //退出行的編輯模式
binddg1();
}