簡體   English   中英

使用EntityDataSource和WHERE過濾數據

[英]Filtering data using EntityDataSource and WHERE

嗨,我有一個EntityDataSource。

我需要以編程方式發送變量(@SelectedValue)以在EntityDataSource的WHERE過濾器中使用。

你可以發一個簡單的核心來告訴我該怎么做嗎? 謝謝你的時間!

要在EntityDataSource上創建WhereParameters,我使用以下代碼:

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

這里是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>

讀這個?

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


更新 :Northwind產品和類別表的示例。
DropDownList列出類別,GridView顯示按類別篩選的產品。

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> 

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

這是你想要的?

我總是更改DefaultValue來設置代碼隱藏的參數,如下所示:

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

它對我有用。

編輯:然后您可以在aspx-File中指定WhereParameter,而不需要將其添加到代碼隱藏中的WhereParameters集合中:

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

我在我的頁面上使用它來填充網格

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

網格通過這種方式調用entitydatasource

DataSourceID="edsOperacionData"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM