2011-01-12 17 views
6

Hallo Ich habe eine EntityDataSource.Filtern von Daten mit EntityDataSource und WHERE

Ich muss programmgesteuert SEND eine Variable (@SelectedValue) in einem WHERE-Filter für die EntityDataSource verwendet werden.

Können Sie einen einfachen Kern veröffentlichen, um mir zu zeigen, wie es geht? Vielen Dank für Ihre Zeit!

erstellen Where auf EntityDataSource verwende ich diesen Code:

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

Hier ist der Code für die Steuerung:

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

Antwort

6

das lesen?

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


aktualisieren: Ein Beispiel mit Nordwind-Produkten und Kategorien Tabelle.
DropDownList listet die Kategorien auf und die GridView zeigt die Produkte nach Kategorie gefiltert an.

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

Die 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); 
} 

Ist das, was Sie suchen?

+0

Dank ich es gelesen, ich muss noch wissen, wie man pr ogrammatic SEND einen Wert an das EntityDataSet, eine Idee? danke – GibboK

+0

Great Link und Erklärung! +1 für sicher! – H27studio

+0

Dieser Link ist jetzt defekt, aber das könnte es sein: [link] (http://www.asp.net/web-forms/tutorials/getting-started-with-ef/the-entity-framework-and-aspnet -getting-started-3) – PeterX

4

Ich habe mich verändert immer die DefaultValue einen Parameter aus Code-behind zu setzen, etwa so:

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

Es ist für mich gearbeitet.

Edit: Sie können dann den WhereParameter in der aspx-Datei und müssen nicht an die Where Sammlung in Code-behind hinzuzufügen:

<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

Ich benutze diese auf meinen Seiten ein füllen Gitter

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

das Gitter ruft die EntityDataSource von diesem

DataSourceID="edsOperacionData" 
Verwandte Themen