2009-09-28 6 views
3

J'ai un formulaire qui contient plusieurs zones de texte à l'intérieur de tr/td. J'essaie d'obtenir les zones de texte en utilisant la méthode .FindControl, mais il revient null. Le FormView est toujours en mode Edit (donc je suis toujours dans le EditItemTemplate) et j'essaye de charger les valeurs de la chaîne querystring dans les zones de texte provenant de la page précédente, donc j'ai besoin de cela sur page_load. Je le fais sur GridViews tout le temps comme ceci:FormView.FindControl(): erreur de référence d'objet

txtFirstName = (TextBox)fvGeneralInfo.FindControl("txtFirstName"); 

ou comme ceci:

txtFirstName = (TextBox)fvGeneralInfo.FooterRow.FindControl("txtFirstName"); 

ou comme ceci:

txtFirstName = (TextBox)fvGeneralInfo.Rows.FindControl("txtFirstName"); 

Qu'est-ce qui se passe?

<asp:FormView ID="fvGeneralInfo" runat="server" 
    DataSourceID="objInstructorDetails" 
    OnItemCommand="fvGeneralInfo_ItemCommand" 
    OnItemUpdated="fvGeneralInfo_ItemUpdated" 
    DefaultMode="Edit" 
    DataKeyNames="InstructorID" > 
    <EditItemTemplate> 
     <table> 
      <tr> 
       <td colspan="2" class="Admin-SubHeading" style="padding-left:10px;">General Info:</td> 
      </tr> 
      <tr> 
       <td class="Admin-FieldLabel">ID:</td> 
       <td><asp:TextBox ID="txtInstructorId" runat="server" CssClass="Admin-Textbox" ReadOnly="true" Text='<%# Bind("InstructorID") %>' /></td> 
      </tr> 
      <tr> 
       <td class="Admin-FieldLabel">First Name:</td> 
       <td><asp:Textbox ID="txtFirstName" runat="server" CssClass="Admin-Textbox" Text='<%# Bind("FirstName") %>' /></td> 
      </tr> 
      </table> 
     </EditItemTemplate> 
    </asp:FormView> 
+0

Ne trouvez-vous l'une des réponses comme correctes? – abatishchev

Répondre

2

Appelez d'abord DataBind();. Puis FindControl()

2

La réponse d'abatishchev est correcte, bien que j'ai trouvé cette variante un peu plus nette: cela évite d'avoir à appeler DataBind() explicitement.

<asp:FormView ID="fvMember" runat="server" DataSourceID="tblMembers" DefaultMode="Insert" OnDataBound="DataBound">...</asp:FormView> 

protected void DataBound(object sender, EventArgs e) 
{ 
    if (fvMember.CurrentMode == FormViewMode.Edit) 
    { 
     Label lblSubmit = fvMember.FindControl("lblSubmit") as Label; 
     ... 
    } 
} 
Questions connexes