2011-01-12 17 views
6

Hola Tengo un EntityDataSource.Filtrar datos utilizando EntityDataSource y DONDE

Necesito enviar mediante programación una variable (@SelectedValue) para usar en un filtro WHERE para EntityDataSource.

¿Puedes publicar un núcleo simple para mostrarme cómo hacerlo? ¡Gracias por tu tiempo!

Para crear WhereParameters en EntityDataSource utilizo este código:

  Parameter parameter = new Parameter("SelectedValue", TypeCode.Int32, uxTreeView1.SelectedValue); 
      parameter.DefaultValue = "0"; 
      uxEntityDataSourceNodes.WhereParameters.Add(parameter);` 

Aquí el código para el control:

 <asp:EntityDataSource ID="uxEntityDataSourceNodes" runat="server" 
     ConnectionString="name=TestHierarchyEntities" 
     DefaultContainerName="TestHierarchyEntities" EnableFlattening="False" 
     EnableUpdate="True" EntitySetName="CmsCategories" Where="it.CategoryId = @SelectedValue" 
     EntityTypeFilter="" Select=""> 
    </asp:EntityDataSource> 

Respuesta

6

leer esto?

The Entity Framework and ASP.NET - Filtering, Ordering, and Grouping Data


actualización: Un ejemplo con los productos de Northwind y categorías de la tabla.
DropDownList enumera las categorías y GridView muestra los productos filtrados por categoría.

El ASPX

<asp:DropDownList ID="uxTreeView1" runat="server" 
      AutoPostBack="true" 
      AppendDataBoundItems="true" 
      DataSourceID="EntityDataSource1" 
      DataTextField="CategoryName" 
      DataValueField="CategoryID" 
      OnSelectedIndexChanged="uxTreeView1_SelectedIndexChanged"> 
    <asp:ListItem Text="Select Category" Value="0"></asp:ListItem> 
</asp:DropDownList> 
<asp:EntityDataSource ID="EntityDataSource1" runat="server" 
    ConnectionString="name=NorthwindEntities" 
    DefaultContainerName="NorthwindEntities" EnableFlattening="False" 
    EntitySetName="Categories" Select="it.[CategoryID], it.[CategoryName]"> 
</asp:EntityDataSource> 
<asp:GridView ID="GridView1" runat="server" 
      AutoGenerateColumns="False" 
      DataSourceID="EntityDataSource2" 
      DataKeyNames="ProductID"> 
    <Columns> 
     <asp:BoundField DataField="ProductName" HeaderText="ProductName" 
      ReadOnly="True" SortExpression="ProductName" /> 
     <asp:BoundField DataField="CategoryID" HeaderText="CategoryID" 
      ReadOnly="True" SortExpression="CategoryID" /> 
    </Columns> 
</asp:GridView> 
<asp:EntityDataSource ID="EntityDataSource2" runat="server" 
    ConnectionString="name=NorthwindEntities" 
    DefaultContainerName="NorthwindEntities" EnableFlattening="False" 
    EntitySetName="Products" 
    Select="it.[ProductID], it.[ProductName], it.[CategoryID]"> 
</asp:EntityDataSource> 

El aspx.cs

protected void uxTreeView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    EntityDataSource2.WhereParameters.Clear(); 
    EntityDataSource2.AutoGenerateWhereClause = true; 
    //alternatively 
    //EntityDataSource2.Where = "it.[CategoryID] = @CategoryID"; 
    EntityDataSource2.WhereParameters.Add("CategoryID", TypeCode.Int32, uxTreeView1.SelectedValue); 
} 

Es esto lo que busca?

+0

Gracias lo leí, todavía tengo que saber cómo pr ogrammatic ENVIAR un valor al EntityDataSet, ¿alguna idea? gracias – GibboK

+0

¡Gran enlace y explicación! +1 seguro! – H27studio

+0

Ese enlace ahora está roto, pero este podría ser: [link] (http://www.asp.net/web-forms/tutorials/getting-started-with-ef/the-entity-framework-and-aspnet -getting-started-part-3) – PeterX

4

Siempre han cambiado la DefaultValue para establecer un parámetro de código subyacente, así:

uxEntityDataSourceNodes.WhereParameters["SelectedValue"].DefaultValue 
    = uxTreeView1.SelectedValue.ToString(); 

que trabajó para mí.

Editar: A continuación, puede especificar el WhereParameter en el aspx-archivo y no es necesario añadir a la colección WhereParameters de código subyacente:

<asp:EntityDataSource ID="uxEntityDataSourceNodes" runat="server" 
    ConnectionString="name=TestHierarchyEntities" 
    DefaultContainerName="TestHierarchyEntities" EnableFlattening="False" 
    EnableUpdate="True" EntitySetName="CmsCategories" 
    Where="it.CategoryId = @SelectedValue" 
    EntityTypeFilter="" Select=""> 
    <WhereParameters> 
     <asp:Parameter Name="SelectedValue" Type="Int32" /> 
    </WhereParameters> 
</asp:EntityDataSource> 
0

yo uso esto en mis páginas para llenar una rejilla

<ef:EntityDataSource runat="server" ID="edsOperacionData" 
    ConnectionString="name=VistasInntecMPContext" 
    DefaultContainerName="VistasInntecMPContext" 
    EnableFlattening="False" 
    EntitySetName="OperacionDatas" 
    OrderBy="it.[ClaveEmpleado]" 
    Select="it.[TarjetaID], it.[ClienteID], it.[ClienteID2], it.[ClaveEmpleado], it.[ProductoGrupoID], it.[ProductoNombre], it.[NoTarjeta], it.[TipoTarjeta], it.[StatusCuentaID], it.[StatusTarjetaID], it.[StatusTarjeta], it.[TarjetaHabienteID]" 
    Where="(it.[ProductoGrupoID] = @ProductoGrupoID OR @ProductoGrupoID is null) AND (it.[ClienteID2] = @ClienteId2 OR @ClienteId2 is null) AND (it.[NoTarjeta] = @NoTarjeta OR @NoTarjeta is null) AND (@Clave is null OR it.[ClaveEmpleado] = @Clave) AND (@Estatus is null OR it.[StatusTarjetaID] = @Estatus)">        
    <WhereParameters> 
     <asp:ControlParameter ControlID="drpProductosB" DbType="Byte" 
      Name="ProductoGrupoID" PropertyName="SelectedValue" /> 
     <asp:ControlParameter ControlID="txtClienteIdB" DbType="String" 
      Name="ClienteId2" PropertyName="Text" /> 
     <asp:ControlParameter ControlID="txtClaveEmpleadoB" DbType="String" 
      Name="Clave" PropertyName="Text" /> 
     <asp:ControlParameter ControlID="txtNoTarjetaB" DbType="String" 
      Name="NoTarjeta" PropertyName="Text" DefaultValue="" /> 
     <asp:ControlParameter ControlID="drpEstatusB" DbType="Byte" 
      Name="Estatus" PropertyName="SelectedValue" /> 
    </WhereParameters> 
</ef:EntityDataSource> 

la red llama a la EntityDataSource por este

DataSourceID="edsOperacionData" 
Cuestiones relacionadas