如何判斷GridView中哪一列中的控制項引發Postback

如何判斷GridView中哪一列中的控制項引發Postback

假設要在GridView中的第四欄(Dropdown)使用Dropdown List讓使用者選擇,接著將被選擇DropdownList所在的RowIndex顯示於同列第三欄的Label中該如何做,本文對此提出可能的作法,說明如下:

image

  • 首先將DropdownList的Autopostback屬性設定為true。
  • 於DropdownList的SelectedIndexChanged事件中撰寫下列程式碼:
   1:  protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
   2:  {
   3:      DropDownList ddl = sender as DropDownList;
   4:      GridViewRow gvr = ddl.NamingContainer as GridViewRow;
   5:  
   6:      if (gvr != null)
   7:      {
   8:          Label lbl = gvr.FindControl("Label1") as Label;
   9:          if (lbl != null)
  10:          {
  11:              lbl.Text = string.Format("第{0}列引發Postback,被選取的值為{1}", gvr.RowIndex.ToString(),ddl.SelectedValue);
  12:          }
  13:      }
  14:  }

整篇文章的重點在於上述程式碼的第4列,透過NamingContainer屬性取得引發Postback的DropdownList所在的Container,也就是GridViewRow,接著就可以取得該列上任一欄位及控制項進行相關的操作。

  • 執行結果如下:

image