次のような 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 をどのように削除する必要がありますか?