[.NET]GridView 抓控制項的值 part1

  • 8819
  • 0
  • 2011-03-04

[.NET]GridView 抓控制項的值 part1

今天實作ASP.NET 4.0 專題實務[I] GridView抓控制項值的練習(沒有修改GridView),

內容:當GridView被按下「編輯」的命令欄位時,進入編輯模式後,修改每一個欄位的值,在按下「更新」後抓到被修改後的值。

所以這裡要注意兩個動作

一個是「編輯」,按下編輯時的動作是在RowEditing事件裡

另一個是「更新」,更新時的動作是在RowUpdating事件,而「更新後」就是RowUpdated事件了

  
假設Grid欄位有id,title
image

點編輯
image

點更新後結果
image

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、RowEditinge.NewEditIndex。(這個就不知道為什麼跟執行命令不一樣)
4、SelectIndexChanging:e.NewSelectedIndex
5、SelectIndexChanged:GridView1.EditIndex
 
參考資料:ASP.NET 4.0 專題實務[I] 實戰入門篇