2010-08-20 4 views
0

У меня есть ListView на странице, использующей источник данных объекта. Я хочу иметь возможность добавлять окно поиска на страницу и показывать только результаты, соответствующие поисковому запросу. Кто-нибудь имеет хорошую ссылку? Я использую C#.Поиск/фильтрация ASP ListView с использованием LINQ

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
    CodeFile="system.aspx.cs" Inherits="system" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server"> 
    <asp:Label ID="LabelSearch" runat="server" Text="Search: " /> 
    <asp:TextBox ID="TextSearchBox" runat="server" /> 
    <asp:ImageButton ID="ButtonSearchBox" runat="server" ImageUrl="~/Styles/Images/Find.png" 
     OnClick="ButtonSearchBox_Click" />&nbsp; 
    <asp:Label ID="LabelSystemCount" runat="server" /> 
    <asp:ListView ID="SystemList" runat="server" DataSourceID="SystemSource" DataKeyNames="SystemID"> 
     <ItemTemplate> 
      <tr id="row" runat="server" class='<%# Container.DataItemIndex % 2 == 0 ? "row" : "altrow" %>'> 
       <td> 
        <%# Eval("Name") %> 
       </td> 
       <td> 
        <%# Eval("Acronym") %> 
       </td> 
       <td> 
        <%# Eval("Description") %> 
       </td> 
       <td> 
        <asp:ImageButton ID="ButtonEdit" runat="server" ImageUrl="~/Styles/Images/Edit.png" 
         ToolTip="Edit" OnClick="ButtonEdit_Click" /> 
        <asp:ImageButton ID="ButtonDelete" runat="server" ImageUrl="~/Styles/Images/Delete-Red-Cross.png" 
         ToolTip="Delete" CommandName="Delete" /> 
       </td> 
      </tr> 
     </ItemTemplate> 
     <LayoutTemplate> 
      <table class="system"> 
       <tr> 
        <th> 
         <asp:LinkButton runat="server" Text="System Name" /> 
        </th> 
        <th> 
         <asp:LinkButton runat="server" Text="Acronym" /> 
        </th> 
        <th> 
         <asp:LinkButton runat="server" Text="Description" /> 
        </th> 
        <th> 
         <asp:Label runat="server" Text="" /> 
        </th> 
       </tr> 
       <tr id="itemPlaceholder" runat="server" /> 
      </table> 
     </LayoutTemplate> 
    </asp:ListView> 
    <asp:DataPager ID="SystemPager" runat="server" PageSize="10" PagedControlID="SystemList"> 
     <Fields> 
      <asp:NumericPagerField /> 
     </Fields> 
    </asp:DataPager> 
    <asp:ObjectDataSource ID="SystemSource" runat="server" DataObjectTypeName="cipfinModel.System" 
     DeleteMethod="Delete" SelectMethod="GetSystems" SelectCountMethod="SystemCount" 
     TypeName="SystemDAO" InsertMethod="Insert" UpdateMethod="Update" EnablePaging="true" /> 
</asp:Content> 
+0

Сразу хочу отметить, что DataTables JQuery плагин делает это на клиенте, и очень взмаха: http://www.datatables.net/ – Codesleuth

ответ

1

Измените метод GetSystems к

GetSystems(String filterword) 

и предоставить текст, введенный в текстовое поле для параметра вашего метода ObjectDataSource Select.

Шаги:
1) Изменение метода в бизнес-классе.
2) Перестройте проект и все необходимые библиотеки
3) Перейдите к проектировщику и дайте ему обновить метод выбора вашего объекта ObjectDataSource. Выберите параметр Parametersource None и оставьте пустое значение по умолчанию.
4) Откройте EventHandler кнопки ButtonClick. (Адаптация к вашему фактическому кодированию :)

this.SystemSource.SelectParameters["PARAMETERNAME"].DefaultValue = TextSearchBox.Text; 
this.SystemSource.Databind(); 
this.SystemList.DataBind(); 
Смежные вопросы