title: FindControl returns null in OnRowCommand Event
body: <p>I have a gridview with few controls in it and I'm trying to get these controls in OnRowCommand event by using the FindControl method, but it always returns null.</p>
  
  <p>This is the gridview</p>
  
  <pre><code>&lt;asp:GridView ID="GridView1" runat="server" CssClass="table table-striped table-bordered" AutoGenerateColumns="false" DataKeyNames="ID" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowEditing="GridView1_RowEditing"
      OnRowDataBound="GridView1_RowDataBound" OnRowCommand="GridView1_RowCommand" OnRowUpdating="GridView1_RowUpdating"&gt;
      &lt;Columns&gt;
          &lt;asp:TemplateField HeaderText="Service Type"&gt;
              &lt;ItemTemplate&gt;
                  &lt;asp:Label Text='&lt;%# Eval("Fund_Service_Type") %&gt;' runat="server" /&gt;
              &lt;/ItemTemplate&gt;
              &lt;EditItemTemplate&gt;
                  &lt;asp:DropDownList ID="ddlServiceType" runat="server"&gt;
                  &lt;/asp:DropDownList&gt;
              &lt;/EditItemTemplate&gt;
          &lt;/asp:TemplateField&gt;
  
          &lt;asp:TemplateField HeaderText="Method"&gt;
              &lt;ItemTemplate&gt;
                  &lt;asp:Label Text='&lt;%# Eval("Fund_Method") %&gt;' runat="server" /&gt;
              &lt;/ItemTemplate&gt;
              &lt;EditItemTemplate&gt;
                  &lt;asp:DropDownList ID="ddlFundMethod" runat="server"&gt;
                  &lt;/asp:DropDownList&gt;
              &lt;/EditItemTemplate&gt;
          &lt;/asp:TemplateField&gt;
  
          &lt;asp:TemplateField HeaderText="Source"&gt;
              &lt;ItemTemplate&gt;
                  &lt;asp:Label Text='&lt;%# Eval("Fund_Source") %&gt;' runat="server" /&gt;
              &lt;/ItemTemplate&gt;
              &lt;EditItemTemplate&gt;
                  &lt;asp:DropDownList ID="ddlFundSource" runat="server"&gt;
                  &lt;/asp:DropDownList&gt;
              &lt;/EditItemTemplate&gt;
          &lt;/asp:TemplateField&gt;
  
          &lt;asp:TemplateField HeaderText="Amount"&gt;
              &lt;ItemTemplate&gt;
                  &lt;asp:Label Text='&lt;%# Eval("Fund_Amount") %&gt;' runat="server" /&gt;
              &lt;/ItemTemplate&gt;
              &lt;EditItemTemplate&gt;
                  &lt;asp:TextBox ID="txtAmount" runat="server" Text='&lt;%# Eval("Fund_Amount")%&gt;'&gt;&lt;/asp:TextBox&gt;
              &lt;/EditItemTemplate&gt;
          &lt;/asp:TemplateField&gt;
  
          &lt;asp:TemplateField Visible="true" HeaderText="" ShowHeader="false"&gt;
              &lt;ItemTemplate&gt;
                  &lt;asp:LinkButton ID="btnRedirect" runat="server" CommandArgument='&lt;%# Bind("ID") %&gt;' CommandName="CompleteTransaction" Text="Complete Transaction"&gt;&lt;/asp:LinkButton&gt;
              &lt;/ItemTemplate&gt;
          &lt;/asp:TemplateField&gt;
      &lt;/Columns&gt;
  &lt;/asp:GridView&gt;
  </code></pre>
  
  <p>And here is the row command event</p>
  
  <pre><code>protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
      {
  
          if (e.CommandName.Equals("CompleteTransaction"))
          {                
              GridViewRow gvr = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
              int rowIndex = Convert.ToInt32(e.CommandArgument); // Get the current row
              DropDownList ddlServiceType = (DropDownList)GridView1.Rows[rowIndex].Cells[0].FindControl("ddlServiceType");//retuns null
  
              GridViewRow selectedRow = GridView1.Rows[rowIndex];
              DropDownList name = (DropDownList)gvr.Cells[0].FindControl("ddlServiceType"); //also returns null
              Server.Transfer("~/Transaction.aspx");
          }
      }
  </code></pre>
  
  <p>what I'm trying to do is get the selected row so and values from its controls, so that I can use them in Transaction page. </p>
  
  <p><strong>Edit:</strong> The FindControl method is working fine in RowUpdating and RowDataBound events</p>