Hola
Estoy intentando filtrar los datos de un gridview mediante un dropdownlist, pero no lo consigo. Este es el marcado del drop:
<asp:DropDownList ID="DropCategorias" runat="server" ItemType="TM1.Models.cat_Categorias"
SelectMethod="GetCategorias" DataTextField="nomCategoria" DataValueField="nomCategoria" AutoPostBack="True">
</asp:DropDownList>
y este el método "GetCategorias"
public IQueryable GetCategorias()
{
return db.Categorias;
}
El gridview:
<asp:GridView ID="GridSubCat" runat="server" ItemType="TM1.Models.cat_SubCategorias" DataKeyNames="SubCategoriaID"
SelectMethod="GetSubCategorias" AutoGenerateColumns="False" DeleteMethod="GridSubCat_DeleteItem"
AllowSorting="true" AutoGenerateDeleteButton="True" AllowPaging="true" PageSize="6">
<Columns>
<asp:DynamicField DataField="SubCategoriaID" HeaderText="ID" />
<asp:DynamicField DataField="nomSubCat" HeaderText="SUBCATEGORIA" />
<asp:DynamicField DataField="ActivaSC" HeaderText="ACTIVA">
<HeaderStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:DynamicField>
<asp:TemplateField HeaderText="CATEGORIA">
<ItemTemplate>
<asp:Label ID="Label1" runat="server"
Text='<%# Item.Categorias != null ? Item.Categorias.NomCategoria:"" %>'></asp:Label>
</ItemTemplate>
</Columns>
</asp:GridView>
el método GetSubCategorias que rellena el gridview (y se supone que lo filtra):
public IQueryable<cat_SubCategorias> GetSubCategorias([Control] cat_Categorias DropCategorias)
{
var query = db.SubCategorias.Include(m => m.Categorias);
if (displayCat != null)
{
query = query.Where(m => m.Categorias == DropCategorias);
}
return query;
}
y estas son las clases de entidad:
public class cat_Categorias
{
[Key]
public int CategoriaID { get; set; }
[Required]
[StringLength(40)]
public string NomCategoria { get; set; }
[StringLength(125)]
public string TextoCategoria { get; set; }
public bool Activa { get; set; }
public virtual ICollection<cat_SubCategorias> SubCategorias { get; set; }
}
[Table("[cat.SubCategorias]")]
public class cat_SubCategorias
{
[Key]
public int SubCategoriaID { get; set; }
[Required]
[StringLength(40)]
public string NomSubCat { get; set; }
public int CategoriaID { get; set; }
[StringLength(100)]
public string TextoSubCat { get; set; }
public bool ActivaSC { get; set; }
public virtual cat_Categorias Categorias { get; set; }
public virtual ICollection<cat_Productos> Productos { get; set; }
}
Los datos se cargan bien tanto en el drop comoen el gridview, pero no funciona el filtro.
//Editado//
Bien, he descubierto que para que funcione el ID del Dropdown y el nombre del parámetro en el método "GetSubcategorias"
ha de ser el mismo. Ya lo he corregido, pero ahora recibo el error :
No se puede crear un valor de constante de tipo 'TM1.Models.cat_Categorias'. Solo se admiten tipos primitivos o tipos de enumeración en este contexto.
¿Qué estoy haciendo mal?
Gracias y un saludo