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 コントロールを用いて表示することができます。