程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 在DataGrid控件中編輯數據項

在DataGrid控件中編輯數據項

編輯:.NET實例教程

要想在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();
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved