[.NET]GridView 抓控制項的值 part1
今天實作ASP.NET 4.0 專題實務[I] GridView抓控制項值的練習(沒有修改GridView),
內容:當GridView被按下「編輯」的命令欄位時,進入編輯模式後,修改每一個欄位的值,在按下「更新」後抓到被修改後的值。
所以這裡要注意兩個動作
一個是「編輯」,按下編輯時的動作是在RowEditing事件裡
另一個是「更新」,更新時的動作是在RowUpdating事件,而「更新後」就是RowUpdated事件了
假設Grid欄位有id,title
點編輯
點更新後結果
ASPX
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False"
ReadOnly="True" SortExpression="id" />
<asp:BoundField DataField="title" HeaderText="title" SortExpression="title" />
</Columns>
C#
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
Response.Write("選取的索引鍵為" + GridView1.DataKeys[e.RowIndex].Value.ToString());
TextBox tb = new TextBox();
tb = (TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0];
Response.Write("<br> title=" + tb.Text);
Response.End();
}
這裡的e.RowIndex指的是觸發命令的那一列,
而DataKeys是抓取索引鍵欄位(抓GridView裡DataKeyNames屬性設定的欄位)
cell[2]指的是第3個欄位(從0開始算 直接從ASPX裡看感覺比較清楚 0-CommandField 1-BoundField(id) 2-BoundField(title) ),
所以cell[2]是要抓第2個BoundField的欄位
Control[0]指這個欄位裡的第一個控制項
另要提醒一下,
因為這裡使用的cell跟control都是傳入固定的值
之後若是遇到資料欄位有新增或順序修改時
就必須要重新修改程式,造成後續維護不便
所以就要改變成後面要說的直接抓取控制項ID(FindControl)的做法了。
整理一下重點:
1、RowUpdating、RowDeleting:e.RowIndex。(執行Row命令時)
2、PageIndexChanging:e.NewPageIndex。(跟頁面相關的)
3、RowEditing:e.NewEditIndex。(這個就不知道為什麼跟執行命令不一樣)
4、SelectIndexChanging:e.NewSelectedIndex。
5、SelectIndexChanged:GridView1.EditIndex。
參考資料:ASP.NET 4.0 專題實務[I] 實戰入門篇