データバインド イベントを気にせずにネストされたリピーターを実行する最も簡単な方法は、<%# %>
構文を使用して DataSource を設定することです。
例えば:
<asp:Repeater runat="server" id="Departments">
<ItemTemplate>
Name: <%# Eval("DeptName") %>
Employees:
<asp:Repeater runat="server" DataSource='<%# Eval("Employees") %>'>
<ItemTemplate><%# Eval("Name") %></ItemTemplate>
<SeparatorTemplate>,</SeparatorTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
これは、 Departments クラスに Employees プロパティがあることを前提としています-例:
public class Department {
public string DeptName {get; set;}
public IEnumerable<Employee> Employees {get; set;}
}
public class Employee {
public string Name {get; set;}
}
外部リピーター オブジェクトに内部リピーター オブジェクトに対応するプロパティがない場合でも、コード ビハインドに計算を行うメソッドを追加することで、このトリックを使用できます。したがって、内部リピーターは次のようになります。
<asp:Repeater runat="server" DataSource='<%# GetEmployees(Container.DataItem) %>'>
GetEmployees は次のようになります。
protected IEnumerable<Employee> GetEmployees(object item) {
var dept = (Department) item;
// then do whatever is necessary to get the employees from dept
return employees;
}