0

次のような aspx ページがあります。

<asp:TextBox ID="SearchInput" AutoPostBack="true" runat="server" />
<asp:Repeater ID="SelectUserListItemRepeater" runat="server">
    <ItemTemplate>
        <div><%# DataBinder.Eval(Container.DataItem, "Title")%></div>
    </ItemTemplate>
</asp:Repeater>

そして、このようなコードビハインド。

using System;
using System.Linq;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Test : UserControl
{
    private IList<TestItem> items;

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        items = new List<TestItem>();
        items.Add(new TestItem { Title="Lars"});
        items.Add(new TestItem { Title = "Johan" });
        items.Add(new TestItem { Title = "Bob" });
        SelectUserListItemRepeater.DataSource = items;
        SelectUserListItemRepeater.DataBind();

        SearchInput.TextChanged += new EventHandler(SearchInput_TextChanged);
    }

    void SearchInput_TextChanged(object sender, EventArgs e)
    {
        var input = sender as TextBox;
        var searchResult = items.Where(i => i.Title.Contains(input.Text));
        /* Here I would like to show this search result in the Repeater, 
         * but what is the best way to do it?
         */ 
    }
}

public class TestItem {
    public string Title { get; set; }
}

この種の状況で検索機能を実装する最善の方法は何ですか? 1 つの検索テキスト入力と、DIV 要素内の文字列のリストをレンダリングする 1 つのリピーターがあります。ユーザーが入力に検索キーを書き込むと、リピーターは検索キーを含む文字列のみを表示する必要がありますか? 検索キーを含まない他の RepeaterItems を非表示にするにはどうすればよいですか? または、それらの RepeaterItems をどのように削除する必要がありますか?

4

2 に答える 2

0

これを試して

private static List<TestItem> items = new List<TestItem>();

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    items = new List<TestItem>();
    items.Add(new TestItem { Title="Lars"});
    items.Add(new TestItem { Title = "Johan" });
    items.Add(new TestItem { Title = "Bob" });

    SearchInput.TextChanged += new EventHandler(SearchInput_TextChanged);

    // bind repeater.
    BindRepeater();

}

protected void SearchInput_TextChanged(object sender, EventArgs e)
{
    var input = sender as TextBox;
    items = items.Where(i => i.Title.Contains(input.Text)).ToList();
    BindRepeater();
}

private void BindRepeater()
{
    SelectUserListItemRepeater.DataSource = items;
    SelectUserListItemRepeater.DataBind();
}
于 2012-08-20T13:34:33.277 に答える
0

これを試して:

 void SearchInput_TextChanged(object sender, EventArgs e)
    {
        var input = sender as TextBox;
        var searchResult = items.Where(i => i.Title.Contains(input.Text));
        SelectUserListItemRepeater.DataSource = searchResult;
        SelectUserListItemRepeater.DataBind();

    }
于 2012-08-20T13:29:51.820 に答える