2016-10-03 10 views
4

내 내 GridView에서 TemplateField은 다음과 같이 작성 : 당신이 볼 수 있듯이의 FindControl가 오류로 종료 [여전히 미해결]

<asp:TemplateField HeaderText="Dienstleistung" SortExpression="gutscheinbezeichnung" HeaderStyle-Width="20px"> 
      <EditItemTemplate> 
       <asp:HiddenField runat="server" Value='<%# Bind("gutscheinart_id")%>' ID="HiddenFieldGutscheinartID"/> 
       <asp:DropDownList ID="DropDownListDienstleistung" ClientIDMode="Static" runat="server" DataSourceID="ObjectDataSourceDropDown" DataValueField="gutscheinbezeichnung"> 

       </asp:DropDownList> 

      <asp:ObjectDataSource ID="ObjectDataSourceDropDown" runat="server" SelectMethod="GetGutscheinArt" TypeName="Gmos.Halbtax.Admin.Client.WebGui.DataManager"></asp:ObjectDataSource> 

      </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="LabelGutscheinbezeichnung" runat="server" Text='<%# Bind("gutscheinbezeichnung") %>'></asp:Label> 
       </ItemTemplate> 
      <HeaderStyle Width="20px" /> 
</asp:TemplateField> 

, 내가 가진 내 EditItemTemplate -Field에 DropDownListDienstleitung라는 DropDownList. 이 이벤트가 발생하면, 이제

protected void GridViewLehrling_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    DropDownList DropDownListDienstleistungBackEnd = (DropDownList)GridViewLehrling.Rows[GridViewLehrling.SelectedIndex].FindControl("DropDownListDienstleistung"); 
    HiddenField HiddenFieldGutscheinartIDBackEnd = (HiddenField)GridViewLehrling.Rows[GridViewLehrling.EditIndex].FindControl("HiddenFieldGutscheinartID"); 
} 

:

나는이 이벤트를 만들었습니다. 이 오류 발생 자 :

색인이 범위를 벗어났습니다. 음수가 아니며 컬렉션의 크기가 보다 작아야합니다. 매개 변수 이름 : 색인

제안 사항?

답변

0

다음 코드 조각을 사용하여 시도 :

protected void GridViewLehrling_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if (e.Row.RowState == DataControlRowState.Edit) 
     { 
      DropDownList ddlBackEnd = (DropDownList)e.Row.FindControl("DropDownListDienstleistung"); 
      HiddenField hdnBackEnd = (HiddenField)e.Row.FindControl("HiddenFieldGutscheinartID"); 
     }   
    } 
} 

코드는 첫번째 행의 type 검사한다. 바닥 글 및 머리글 행이 제외되도록 DataRow이어야합니다. 그런 다음 코드는 행이 실제로 편집 모드에 있는지 확인합니다. 이 경우 코드는 실제 행에서 FindControl을 수행하는 컨트롤을 가져옵니다.

+0

정확히 무엇을 검색했습니다. 고마워 –

0

당신은 당신이 datarow 여부

이 시도 현재의 행을 확인해야하는 방법을 너무 헤더의 드롭 다운 컨트롤을 찾을 수 없습니다.

protected void GridViewLehrling_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (GridViewLehrling.Rows.Count > 0) 
      { 
       if (e.Row.RowType == DataControlRowType.DataRow) 
       { 
        DropDownList DropDownListDienstleistungBackEnd = (DropDownList)GridViewLehrling.Rows[GridViewLehrling.SelectedIndex].FindControl("DropDownListDienstleistung"); 
        HiddenField HiddenFieldGutscheinartIDBackEnd = (HiddenField)GridViewLehrling.Rows[GridViewLehrling.EditIndex].FindControl("HiddenFieldGutscheinartID"); 
       } 
      } 
     } 
+0

나를 위해 작동하지 않습니다. 오류는 여전히 동일합니다. sanx –

+0

업데이트 대답 .. –

+0

아직도 .. 아니 succes –