【发布时间】: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