【问题标题】:How do you filter an ASP.NET Entity Framework Bound ListView via DropDownList?如何通过 DropDownList 过滤 ASP.NET 实体框架绑定的 ListView?
【发布时间】:2014-12-18 19:04:19
【问题描述】:

我在找出使用 DropDownList 的选定值的结果过滤实体框架查询以填充 ListView 控件的最佳方法时遇到了一些麻烦。

我的代码如下:

Public Function ListViewProducts_GetData() As IQueryable

    Dim strVendorName As String = ddlFilterVendor.SelectedValue

    Dim myEntities As New InventoryProductsEntities()
    Return (From product In myEntities.InventoryProducts
           Order By product.ID Ascending
           Where product.VendorID = strVendorName
           Select product).Take(ddlDisplayRecords.SelectedValue)

End Function

现在这很粗糙,但我希望能够按供应商过滤这些数据,然后对其进行分页,但我无法让 ListView 显示更新的查询数据。它只是继续显示与以前相同的数据,即使 ddlFilterVendor.SelectedValue 发生变化。

下拉列表代码如下:

<asp:DropDownList ID="ddlFilterVendor" runat="server" AutoPostBack="True" DataSourceID="SqlDataSourceVendor" DataTextField="VendorID" DataValueField="VendorID" AppendDataBoundItems="True">
    <asp:ListItem Selected="True">All</asp:ListItem>
</asp:DropDownList>

我被困在这一点上......我正在考虑将 ddlFilterVendor.SelectedValue 发布到 QueryString 并重新加载页面,但我想应该有一种更简单的方法来做到这一点。任何帮助或想法将不胜感激!谢谢!

SqlDataSource代码如下:

<asp:SqlDataSource ID="SqlDataSourceVendor" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>" SelectCommand="SELECT DISTINCT [VendorID] FROM [InventoryProducts]"></asp:SqlDataSource>

【问题讨论】:

  • 您正在使用带有下拉菜单的 SqlDataSource。你能发布一个定义吗?
  • 你为什么不使用EntityDataSource
  • @Andrei - 我添加了 SqlDataSource 代码。过滤器将在页面加载时起作用,但从 DropDownList 中选择另一个项目将导致回发,运行 ListViewProducts_GetData() 函数,但不会更改第一次加载页面时显示的 ListView 中的项目。跨度>
  • @OneFineDay - 当涉及到 ListView 的 ModelBinding(如果 EntityDataSource 是这样做的)时,我在灵活性方面遇到了一些问题,我无法从 EditTemplate 更新它。这可能是我应该在另一篇文章中提出的问题......
  • 我已经将它与GridView 一起使用,并且模板应该大致相同。就更新而言,您需要将列表视图项转换为实体类型并用它更新模型并保存。

标签: asp.net vb.net entity-framework listview dropdownlistfor


【解决方案1】:

我已经找到了解决这个问题的方法。在 DropDownList 的 SelectedIndexChanged 事件中,我调用了如下方法:

ListViewProducts.DataBind()

这使用适当的供应商过滤器重新查询数据库,如代码 sn -p 所示:

Public Function ListViewProducts_GetData() As IQueryable

    Dim strVendorName As String = ddlFilterVendor.SelectedValue

    Dim myEntities As New InventoryProductsEntities()
    Return (From product In myEntities.InventoryProducts
            Order By product.ID Ascending
            Where product.VendorID = strVendorName
            Select product).Take(ddlDisplayRecords.SelectedValue)

End Function

谢谢!

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2017-01-30
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多