ASP.NET には、Repeater という便利な Web Control がある。 あるものは使わなくちゃ、というので使ってみた。 このコントロールをネストしようとして、ちょっとやっかいなことになった。(笑) で、無事ネストして使えるようになって喜んでいたけれど、別の部分のデバッグ中に「ドジ」を発見してしまった。
<asp:Repeater ID="RepeaterMain" runat="server">
<ItemTemplate>
<asp:Repeater ID="RepeaterImage" DataSource='<%# GetImageArray() %>'
runat="server">
<ItemTemplate>
<%# Container.DataItem %>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
</pre>
ここで DataSource= の部分に、System.Collections.IEnumerable または IListSource インターフェイスを実装するオブジェクトを指定するわけだが、データアクセスをして、結果を入れた配列を戻す関数を指定していた。 当然動作はするが、上の階層の Repeater の ItemTemplate ループが回る回数分データアクセスが発生する。
まったくドジだね。 RepeaterMain.DataBind(); する前に 配列を取得しておき、DataSource= には、その配列を渡してあげるだけにして、たぶん、問題は解決? いや、問題はなかった???(汗) 動いているので、デバッグしないと気がつかない...