2016-10-03 6 views
4

Мои TemplateField в моем GridView была создана так:FindControl в RowDataBound-Event заканчивается ошибкой [до сих пор нерешенной]

<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> 

Как вы можете видеть, у меня есть DropDownList называется DropDownListDienstleitung в моем EditItemTemplate -field.

Я также создал это событие:

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

еще..no succes –

 Смежные вопросы

  • Нет связанных вопросов^_^