2009-09-28 2 views
3

У меня есть форма, у которого есть несколько текстовых полей внутри tr/td. Я пытаюсь получить текстовые поля с помощью метода .FindControl, но он возвращается null. FormView всегда находится в режиме редактирования (поэтому я всегда в EditItemTemplate), и я пытаюсь загрузить значения querystring в текстовые поля, исходящие из предыдущей страницы, поэтому мне нужно, чтобы это произошло на page_load. Я делаю это на GridViews все время, как это:FormView.FindControl(): ошибка ссылки объекта

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

или как это:

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

или как это:

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

Что это дает?

<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

ли вы не нашли ответов, как правильно? – abatishchev

ответ

2

Ответ на abatishchev прав, хотя я нашел этот вариант немного опрятным: он избегает необходимости прямого вызова DataBind().

<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; 
     ... 
    } 
} 
Смежные вопросы