Repeater コントロールのデータソースに List コレクションを使用する
SPECIAL
List<> コレクションに保持した値を Repeater コントロールで出力する
主に SqlDataReader 等のオブジェクトと併せて利用することが多い Repeater コントロールですが、System.Collections.Generic.List<> コレクションに保持したオブジェクトをデータソースとして使用することも可能です。
使用方法としては、SqlDataReader を使用する方法と特に大きな変わりはなく、Repeater コントロールの DataSource として List<> オブジェクトのインスタンスを設定して、DataBind を実行すれば大丈夫です。なお、Repeater コントロールで値を取得する際も、DataBinder.Eval を用いて List<> に格納したオブジェクトのプロパティを指定する形となります。
ASPX
<form id="form1" runat="server">
<asp:Repater ID="RepeaterSample" runat="server">
<HeaderTemplate>
<table>
<tr>
<th>名前</th>
<th>電話番号</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# DataBinder.Eval(Container.DataItem, "Name") %></td>
<td><%# DataBinder.Eval(Container.DataItem, "Tel") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</form>
ASPX ファイルでは DataBinder.Eval メソッドを用いて、DataSource に設定されたコレクションのプロパティを取得しています。
C#
まずは、コレクションに格納するオブジェクトの定義です。
public class PhoneNumberClass
{
private String m_Name;
private String m_Tel;
public PhoneNumberClass(String name, String tel)
{
m_Name = name;
m_Tel = tel;
}
public String Name
{
get
{
return m_Name
}
set
{
m_Name = value;
}
}
public String Tel
{
get
{
return m_Tel
}
set
{
m_Tel = value;
}
}
}
上記の例は、プロパティ Name 及び Tel が実装されたクラスとなっています。
このクラスのインスタンスを、下記のように List<> コレクションを用いて Repeater コントロールにバインドすることが出来ます。
using System.Collections.Generic;
public partial class _Sample : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<PhoneNumberClass> data = new List<PhoneNumberClass>();
data.Add(new PhoneNumberClass("John", "000-000-0000"));
data.Add(new PhoneNumberClass("Mary", "000-000-0000"));
RepeaterSample.DataSource = data;
RepeaterSample.DataBind();
}
}
}
こうすることで、変数 data コレクションに格納された PhoneNumberClass の値それぞれを、Repeater コントロールを用いて表示することができます。