2010-08-20 108 views
0

我在使用对象数据源的页面上有一个ListView。我希望能够将搜索框添加到页面并仅显示与搜索查询匹配的结果。有没有人有一个很好的参考?我正在使用C#。使用LINQ搜索/筛选ASP ListView

<%@ 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 2010-08-20 16:37:00

回答

1

您GetSystems方法更改为

GetSystems(String filterword) 

,并提供文本输入到文本框您的ObjectDataSource选择方法的参数。

步骤
1)更改业务类中的方法。
2)重建项目和所有需要的库
3)转到设计器并让它刷新ObjectDataSource的Select方法。选择作为参数源无,并保留默认值为空白。
4)打开ButtonClick的EventHandler。 (适应你的实际编码:)

this.SystemSource.SelectParameters["PARAMETERNAME"].DefaultValue = TextSearchBox.Text; 
this.SystemSource.Databind(); 
this.SystemList.DataBind();