今天在用GridView控件時,發現了一個問題,就是使用GridView控件在刪除數據時的問題。接下來我們通過模板列方式和CommandField方式刪除某條數據講解下兩者之間的區別。
方式一:通過模板列式刪除數據
案例:在頁面中添加一個GridView控件,然后通過編輯列的方式為GridView添加對應的列。如下圖:紅色圈起的部分為模板列的刪除列
然后在編輯模板中拖一個刪除按鈕,如下圖
接下來我們就可以編寫代碼了。
找到GridView的RowCommand事件,如下圖
然后在源視圖下,添加如下三個重要的屬性
CommandName:命令的名稱,值一般寫成Delete,也可以寫成其他名稱,但是為了見名知意,我們寫成Delete就ok
CommandArgument:命令參數
OnClientClick:注冊客戶端腳本,我們都知道,刪除數據之前要給用戶一個提示,可以通過該屬性實現。如下圖:
接下來我們就可以在RowCommand中編寫代碼了
if (e.CommandName == "Delete") //如果是刪除按鈕
{
string stuNO = e.CommandArgument.ToString(); //獲取學生編號
string sql = "delete from Student where studentno='" + stuNO + "'";
int result = SqlHelper.ExecuteNonQuery(sql, CommandType.Text);
if (result > 0)
{
Response.Write("<script type=text/javascript>alert('刪除成功!')</script>");
BindData();
}
else
{
Response.Write("<script type=text/javascript>alert('刪除失敗!')</script>");
}
}
這樣我們就可以刪除一條數據了。
方式二:CommandField實現刪除某條數據
由於CommandField方式會引發RowDeleting事件,所以我們直接在GridView的RowDeleting事件中編寫代碼就可以了,代碼如下:
string stuNo = GridView1.DataKeys[e.RowIndex].Value.ToString();
string sql = "delete from Student where studentno='" +stuNo+ "'";
int result = SqlHelper.ExecuteNonQuery(sql, CommandType.Text);
if (result > 0)
{
Response.Write("<script type=text/javascript>alert('刪除成功!')</script>");
BindData();
}
else
{
Response.Write("<script type=text/javascript>alert('刪除失敗!')</script>");
}
最后我們對這兩中方式的刪除做個總結。
模板列中通過按鈕刪除某條數據:
01.不會引發RowDeleting事件
02.需要給模板列設置CommandName和CommandArgument
03.通過 string stuNO = e.CommandArgument.ToString();拿到主鍵
當然前提是在前台頁面中用CommandArgument='<%# Bind("studentNo")%>'進行設置
通過ComandField刪除某條數據
1. GridView1.DataKeyNames = new string[] { "StudentNo" };
2.既會觸發RowCommand事件,又會觸發RowDeleting事件,並且RowCommand事件
會先被觸發,這樣的話就不能再同一個GridView中既用模板列刪除,又用超鏈接刪除!
3.獲取主鍵方式: string stuNo=GridView1.DataKeys[e.RowIndex].Value.ToString(); */
注意:之所以可以通過GridView1.DataKeys[e.RowIndex].Value.ToString();
獲取到當前選中行的主鍵是因為為GridView設置了DataKeyNames。
好了,今天就先總結到這里。以后會陸續更新GridView的使用方法。如果這篇博文能給迷途中的你一丁點兒幫助,那便是極好的。特別是在這個推崇丟棄服務器端控件的時代。