2014-12-18 8 views
0

У меня возникли проблемы с поиском наилучшего способа фильтрации запроса Entity Framework с результатами выбранного значения DropDownList для заполнения элемента управления ListView.Как вы отфильтровываете ASP.NET Entity Framework Bound ListView с помощью DropDownList?

Мой код выглядит следующим образом:

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

Вы используете SqlDataSource с раскрывающимся списком. Можете ли вы опубликовать определение этого? – Andrei

+0

Почему вы не используете [EntityDataSource] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.entitydatasource%28v=vs.110%29.aspx)? – OneFineDay

+0

@Andrei - Я добавил код SqlDataSource. Фильтр будет работать при загрузке страницы, но выбор другого элемента из DropDownList вызовет обратную связь, запустит функцию ListViewProducts_GetData(), но не изменит элементы в ListView, которые были показаны при первой загрузке страницы. – J2Tuner

ответ

0

Я нашел решение этой проблемы. В SelectedIndexChanged событии DROPDOWNLIST, я назвал следующий метод:

ListViewProducts.DataBind() 

Эта повторно запрашивается база данных с соответствующим фильтром поставщика, как показано на фрагменте кода:

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 

Спасибо!