ObjectDataSourceからクラスを呼び出してバインドする
Repeater等のデータリスト系コントロールから、データソースとしてObjectDataSource(以降ODS)を指定した際にクラスを呼び出す方法です。
私個人のやり方ですが、SQL文の定義を1つに集約するため、最近はSqlDataSourceやODSを個別に定義せず、クラスをObjectDataSourceから呼び出しています。
以下にサンプルを示します。
まずRepeaterのデータソースにODSを指定します。
ODSではFruitsクラスのItemsメソッドを呼び出し、パラメータに色タイプ(colorType)としてRedを指定しています。
Itemsメソッドでは、FruitクラスをGeneric化し返しています。
<asp:Repeater ID="rp1" runat="server" DataSource="ods1"> <HeaderTemplate><ol></HeaderTemplate> <ItemTemplate> <li><%# Eval("Name") %>(<%# Eval("Price", "{0}円") %>)</li> </ItemTemplate> <FooterTemplate></ol></FooterTemplate> </asp:Repeater> <asp:ObjectDataSource ID="ods1" runat="server" SelectMethod="Items" TypeName="Products.Fruits"> <SelectParameters> <asp:Parameter DefaultValue="Red" Name="colorType" Type="String" /> </SelectParameters> </asp:ObjectDataSource>
クラス
namespace Products { public class Fruits { public Fruits(){ } public List<Fruit> Items(string colorType) { List<Fruit> fruits = new List<Fruit>(); switch(colorType) { case "Red": fruits.Add(new Fruit("Apple", 100); fruits.Add(new Fruit("Cherry", 250); break; case "Yellow": fruits.Add(new Fruit("Banana", 200); fruits.Add(new Fruit("Pineapple", 400); break; default: break; } return fruits; } } public class Fruit { public Fruit(string name, int price) { Name = name; Price = price; } public string Name{ get; set; } public int Price{ get; set; } } }
実行結果
1. Apple(100円) 2. Cherry(250円)