Foros del Web » Programando para Internet » ASPX (.net) »

error con ItemTemplate y dropdownList

Estas en el tema de error con ItemTemplate y dropdownList en el foro de ASPX (.net) en Foros del Web. Estimados: Estoy tratando de implementar una gridview con un combo en la plantilla de edición, pero no me funciona. tengo un datasource para los productos ...
  #1 (permalink)  
Antiguo 02/10/2011, 12:01
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 20 años
Puntos: 2
error con ItemTemplate y dropdownList

Estimados:

Estoy tratando de implementar una gridview con un combo en la plantilla de edición, pero no me funciona.

tengo un datasource para los productos y otro para la lista de familias (El combo)

Código:
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
        DataObjectTypeName="BE.Producto" SelectMethod="getAll" 
        TypeName="BLL.GestorProducto" UpdateMethod="update">
    </asp:ObjectDataSource>
    
    <asp:ObjectDataSource ID="ObjectDataSourceFamilia" runat="server" 
        SelectMethod="GetAll" TypeName="BLL.GestorFamilia"></asp:ObjectDataSource>
El datagrid, en el campo que tiene el combo.

Código:
   <asp:TemplateField SortExpression="Familia" HeaderText="Familia">
   <EditItemTemplate>
        <asp:DropDownList ID="DropDownList1" Runat="server" 
          DataSourceID="ObjectDataSourceFamilia"
            DataTextField="Nombre" DataValueField="Nombre" 
            SelectedValue='<%# Bind("familia.IdFamilia") %>'>
        </asp:DropDownList>        
   </EditItemTemplate>
  <ItemTemplate>
       <asp:Label Runat="server" Text='<%# Bind("familia.Nombre") %>' 
          ID="Label1"></asp:Label>
   </ItemTemplate>
</asp:TemplateField>--%>
Esto es lo que entendí de la documentación de msdn. Lo estoy encarando bien?
SelectedValue='<%# Bind("familia.IdFamilia") %>'>

me da error : 'DropDownList1' has a SelectedValue which is invalid because it does not exist in the list of items.
Parameter name: value


Muchas gracias desde ya.
  #2 (permalink)  
Antiguo 04/10/2011, 10:02
Avatar de AWesker  
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 27
Respuesta: error con ItemTemplate y dropdownList

Veamos... en el DropDownList estas mostrando el campo Nombre y el value es ¿el mismo campo Nombre? no te podría decir que esto esta mal, ya que depende de la naturaleza de tu proyecto. Aunque por lo general se usa en el DataTextField un campo descriptivo y el DataValueField el Id, pero no siempre aplica. En lo que creo que si estás mal es en esto: SelectedValue='<%# Bind("familia.IdFamilia") %>', estas diciendo que te seleccione por defecto una lista de elementos, cuando sólo debe ser uno ¿me explico?

Algo así: según lo que tienes hasta este momento, estas diciendo que te muestre el campo familia.IdFamilia, o sea que estas llenando una propiedad que sólo admite un elemento con más de un elemento (dependiendo de la consulta), para que hagas pruebas, elimina SelectedValue='<%# Bind("familia.IdFamilia") %>' y prueba ejecutandolo así.

Saludos...
  #3 (permalink)  
Antiguo 12/10/2011, 19:04
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 20 años
Puntos: 2
Respuesta: error con ItemTemplate y dropdownList

Gracias por la respuesta.

Quitando el selectedValue, puedo ver el combo cuando presiono editar, pero aparece el primer item seleccionado.
Cómo logro que quede seleccionado el que está seteado en el registro.?
  #4 (permalink)  
Antiguo 13/10/2011, 09:42
Avatar de AWesker  
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 27
Respuesta: error con ItemTemplate y dropdownList

Bien, creo que no te había entendido desde el principio lo que querías hacer. El error que te generaba antes te dice de forma resumida que queres asignarle un valor que no existe en la lista del DropDownList. Es decir que en realidad si intentas hacer lo que te dije mostrar el texto pero seleccionar el Id, intenta con esto:

Código:
 
<asp:TemplateField SortExpression="familia.Nombre" HeaderText="Familia">
   <EditItemTemplate>
        <asp:DropDownList ID="DropDownList1" Runat="server" 
          DataSourceID="ObjectDataSourceFamilia"
            DataTextField="Nombre" DataValueField="IdFamilia"
            SelectedValue='<%# Bind("familia.IdFamilia") %>'>
        </asp:DropDownList>        
   </EditItemTemplate>
  <ItemTemplate>
       <asp:Label Runat="server" Text='<%# Bind("familia.Nombre")%>' 
          ID="Label1"></asp:Label>
   </ItemTemplate>
</asp:TemplateField>
De esta forma le estas diciendo que te muestre el Nombre y que te seleccione el Id (enmascarado por el texto). Si te truena en este caso intenta quitarle el SelectedValue. También proba el sort (ordenado de la columna) ahi nos avisas como te fue.

Saludos...

Última edición por AWesker; 13/10/2011 a las 11:47
  #5 (permalink)  
Antiguo 13/10/2011, 15:15
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 20 años
Puntos: 2
Respuesta: error con ItemTemplate y dropdownList

Gracias nuevamente.

ahora funciona. Muestra el item y cuando presiono editar muestra el combo con el item correspondiente seleccionado.
Pero ahora cuando presiono Update en la grilla me da el error:

Could not find a property named 'familia.idFamilia' on the type specified by the DataObjectTypeName property in ObjectDataSource 'ObjectDataSource1'.

así quedó el código:

Código:
  <asp:TemplateField SortExpression="Familia" HeaderText="Familia">
   <EditItemTemplate>
        <asp:DropDownList ID="DropDownList1" Runat="server" 
          DataSourceID="ObjectDataSourceFamilia"
            DataTextField="Nombre" DataValueField="idFamilia" 
            SelectedValue='<%# Bind("familia.idFamilia") %>'
           >
        </asp:DropDownList>        
   </EditItemTemplate>
  <ItemTemplate>
       <asp:Label Runat="server" Text='<%# Bind("familia.Nombre") %>' 
          ID="Label1"></asp:Label>
   </ItemTemplate>
</asp:TemplateField>

lo que debiera hacer este método es cambiar el valor del atributo producto.familia.idFamilia

Etiquetas: asp, dropdownlist, gridview
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:01.