GridView學習
在建立gridView控制元件時,必須先為GridView的每一行建立一個GridViewRow物件,建立每一行時,將引發一個RowCreated事件;當行建立完畢,每一行GridViewRow就要繫結資料來源中的資料,當繫結完成後,將引發RowDataBound事件。如果說我們可以利用RowCreated事件來控制每一行繫結的控制元件,那麼我們同樣可以利用RowDataBound事件來控制每一行繫結的資料,也就是讓資料如何呈現給大家。
還舉同樣的例子,在資料表中,存在性別列,上面我們用DropListDown控制元件的DataBounding來表示出了中文的性別,但是畢竟不太美觀,我們現在可以利用Label控制元件和RowDataBound事件來實現完美的中文性別顯示。RowDataBound,
首先,還是把性別列,設定為模板列,並新增一個Label控制元件,將Label控制元件繫結到資料來源的性別段,然後我們在GridView控制元件屬性的事件列表中雙擊RowDataBound,生成如下事件:
Example:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//判斷當前行是否是資料行
if (e.Row.RowType == DataControlRowType.DataRow)
{ //用FindControl方法找到模板中的Label控制元件
Label lb1= (Label)e.Row.FindControl("Label1");
//因為RowDataBound是發生在資料繫結之後,所以我們可以
//判斷Label繫結的資料,如果是True,就更改其text屬性為男
if (lb1.Text== "True")
lb1.Text = "男";
else
lb1.Text = "female";
}
}
3、RowType
RowType可以確定GridView中行的型別,RowType是玫舉變數DataControlRowType中的一個值。RowType可以取值包括 DataRow、Footer、Header、EmptyDataRow、Pager、Separator。很多時候,我們需要判斷當前是否是資料行,通過如下程式碼來進行判斷 :
if (e.Row.RowType == DataControlRowType.DataRow)
4、RowDeleting和RowDeleted事件
RowDeleting發生在刪除資料之前,RowDeleted發生在刪除資料之後。
使用RowDeleting事件,可以在真正刪除前再次確認是否刪除,可以通過設定GridViewDeleteEventArgs.Cancel=True來取消刪除;也可以用於判斷當前資料庫記錄數,如果只剩一條記錄且資料庫不能為空則提示並取消刪除操作。
使用RowDeleted事件,可以在刪除後,通過GridViewDeletedEventArgs的Exception屬性判斷刪除過程中是否產生異常,如無異常,則可以顯示類似於” 1 Records deleted” 之類的提示資訊。
Example:
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//取得當前行號,並取得當前行的GridViewRow物件
int index=e.RowIndex ;
GridViewRow gvr=GridView1.Rows[index];
//取得當前行第二個單元格中的文字
str1 = gvr.Cells[1].Text;
//進行提示
Message.Text ="您將刪除一個使用者,其姓名為"+str1 ;
}
protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e)
{
//如果沒有產生異常,則提示成功刪除,否則提示刪除失敗
if (e.Exception == null)
Message.Text += "
您成功刪除了"+str1 ;
else
Message.Text += "刪除失敗,請聯絡管理員";
}
5、RowEditing事件
在GridView中的行進入編輯模式之前,引發RowEditing事件,如果您需要在編輯記錄前進行某些預處理,可以在這裡操作。如果想取消對當前行的編輯,可以把GridViewEditEventArgs 物件的 Cancel 屬性設定為 true即可。
Example:
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
//用NewEidIndex取得當前編輯的行號,然後獲取gridviewrow物件
GridViewRow gvr = GridView1.Rows[e.NewEditIndex];
//判斷,如果當前編輯行姓名欄為admin使用者,則取消對當前行的編輯
if (gvr.Cells[1].Text =="admin")
e.Cancel = true;
}
6、RowUpdating和RowUpdated事件
RowUpdating事件發生在更新資料來源之前,RowUpdated發生在更新資料來源之後。
我們可以在記錄更新前利用RowUpdating做一些預處理工作,比如修改密碼時,因為密碼在資料庫中不是明文儲存,進行了hash,所以在更新密碼前,應該生成其hash值,再進行更新操作。RowUpdated則可以檢驗更新是否成功。
Example:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow gvr = GridView1.Rows[GridView1 .EditIndex ];
//尋找輸入密碼的控制元件
TextBox tb1 = (TextBox)gvr.FindControl("tb_password");
//將此控制元件中的文字hash後,把password存入NewValues這個字典中
e.NewValues ["password"] =tb1.Text .GetHashCode().ToString () ;
}
protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
//如無異常,則更新成功
if (e.Exception == null)
Message.Text += "更新成功!";
}
7、Keys、OldValues、NewValues集合
Keys字典中一般存放的是資料來源中的主鍵欄位的key和value的對應值,如果主鍵由多個欄位組成,那麼Keys為每個鍵欄位新增其欄位名稱和值。OldValues中存放的是要更新的行的欄位名和原始值,每個欄位為其中的一項。NewValues中存放的是要更新的行的欄位名和修改後的值,每個欄位為其中的一項。注意,主鍵欄位只存放於keys集合中。
這三個集合中的每一項都是DictionaryEntry型別的物件,我們可以用DictionaryEntry.Key來確定一個項的欄位名稱,用DictionaryEntry.Value來確定某項的值。
在上面的例子中,為了把密碼明文加密後再存入資料庫,我們利用了NewValues欄位,重新設定key為password的項的值。為了保證安全性,我們在更新資料前對NewValues中的所有值進行html編碼:
Example1:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//遍歷NewValues,取得其中每一對DictionaryEntry物件
foreach (DictionaryEntry de in e.NewValues)
//de.key就是欄位名,如果此處單獨更新某欄位的話,也可以直接填寫欄位名,//比如 e.NewValues[“password”]
e.NewValues[de.Key] = Server.HtmlEncode(de.Value.ToString());
}
Example2:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//分別利用Keys、OldValues、NewValues取得主鍵名、原始資料和更新後資料
Message .Text = e.Keys["username"] + "的email地址從" + e.OldValues["email"] + "變更為" + e.NewValues["email"];
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-462847/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C# DevExpress控制元件Gridview和GridControl學習總結C#devExpress控制元件View
- GridViewView
- 用GridView匯入匯出Excel,並列印GridViewViewExcel
- GridView全選View
- 自定義GridViewView
- Android之ViewPager+GridView實現GridView介面滑動AndroidViewpager
- flutter Swiper+GridViewFlutterView
- 橫向Gridview使用View
- 使用GridView管理類View
- 學習學習再學習
- 7. Flutter——GridView元件FlutterView元件
- GridView實現分割線View
- GridView與javascript、checkboxViewJavaScript
- GridView正反雙向排序View排序
- GridView匯入至EXCELViewExcel
- GridView列相同合併View
- 深度學習——學習目錄——學習中……深度學習
- Android 解決ListView巢狀GridView、GridView顯示不正常的方法AndroidView巢狀
- jQuery找到GridView控制元件jQueryView控制元件
- GridView生成的HTML程式碼ViewHTML
- GridView多行表頭合併View
- [轉]GridView自動序號View
- GridView 中 DataFormatString 的使用ViewORM
- GridView合併單元格View
- GridView滑鼠移動變色View
- 通過GridView匯出ExcelViewExcel
- GridVIew標題不換行View
- gridview中實現分頁View
- 深度學習(一)深度學習學習資料深度學習
- 深度學習學習框架深度學習框架
- 強化學習-學習筆記3 | 策略學習強化學習筆記
- Android GridView設定條目的高度與寬度相等、GridView條目寬高相同AndroidView
- 學習產品快報09 | “CSDN學習”:增加學習提醒,提示學習不忘記
- 【強化學習】強化學習/增強學習/再勵學習介紹強化學習
- 學習ThinkPHP,學習OneThinkPHP
- 前端學習之Bootstrap學習前端boot
- 學而習之,成就學習
- gridview自動適應列寬View