2016-08-22 1 views
0

Я пытаюсь связать выпадающее меню, которое находится в сетке, но я получаю ошибку.Bind DropDownList в asp.net в Шаблоне элементов в строке databound

<asp:GridView ID="grdddl" AutoGenerateColumns="false" ShowHeader="false" OnRowDataBound="grdddl_RowDataBound" ShowFooter="true" runat="server"> 
        <Columns> 
         <asp:TemplateField> 
          <ItemTemplate> 
           <asp:DropDownList ID="ddlcommtype" SelectedValue='<%#Eval("ComPlanRoleDescr") %>' AutoPostBack="true" OnSelectedIndexChanged="ddlcommtype_SelectedIndexChanged" runat="server"></asp:DropDownList> 
           <asp:HiddenField ID="hdnid" Value='<%#Eval("ID") %>' runat="server" /> 
          </ItemTemplate> 
          <FooterTemplate> 
           <asp:DropDownList ID="ddlcommtypefooter" AutoPostBack="true" OnSelectedIndexChanged="ddlcommtypefooter_SelectedIndexChanged" runat="server"></asp:DropDownList> 
          </FooterTemplate> 
         </asp:TemplateField> 

        </Columns> 
</asp:GridView> 

protected void grdddl_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 

      if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      DropDownList ddlcommtype = (DropDownList)e.Row.FindControl("ddlcommtype"); 
      ddlcommtype.DataSource = listcommtype; 
      ddlcommtype.DataTextField = "ComPlanRoleDescr"; 
      ddlcommtype.DataValueField = "ID"; 
      ddlcommtype.DataBind(); 


     } 
     if (e.Row.RowType == DataControlRowType.Footer) 
     { 
      DropDownList ddlcommtype = (DropDownList)e.Row.FindControl("ddlcommtypefooter"); 
      ddlcommtype.DataSource = listcommtype; 
      ddlcommtype.DataTextField = "ComPlanRoleDescr"; 
      ddlcommtype.DataValueField = "ID"; 
      ddlcommtype.DataBind(); 
     } 
} 

Этот код дает ошибку: «ddlcommtype» имеет SelectedValue, который является недействительным, поскольку он не существует в списке элементов.

ответ

0

В вашей GridView вы устанавливаете SelectedValue для вашего DropDownList, но значение не может быть найден в ListItem-х, которые принадлежат к DropDownList.

Удалите SelectedValue от этой линии:

<asp:DropDownList ID="ddlcommtype" SelectedValue='<%#Eval("ComPlanRoleDescr") %>' AutoPostBack="true" OnSelectedIndexChanged="ddlcommtype_SelectedIndexChanged" runat="server"></asp:DropDownList> 

Если вы хотите использовать SelectedValue, почему бы не сделать это после DataBind()? Например:

DropDownList ddlcommtype = (DropDownList)e.Row.FindControl("ddlcommtype"); 
ddlcommtype.DataSource = listcommtype; 
ddlcommtype.DataTextField = "ComPlanRoleDescr"; 
ddlcommtype.DataValueField = "ID"; 
ddlcommtype.DataBind(); 

// Now set the default value: 
ddlcommtype.SelectedValue = "InsertValueHere"; 
+0

, но мне нужно выбрать значение, и оно находится в списке, который привязывается к сетке. –

+0

Эта ошибка в первый раз, когда элемент управления не входит в строку datarow или нижний колонтитул –

+0

см. Обновленный ответ – Delosdos

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