拡張メソッドでRepeaterコントロールのRepeaterItemを型指定されたDataRowに変換します。
どういうこと?
型指定されたDataTableをRepeaterコントロールのDataSourceにバインドする場合、RepeaterItemを型指定されたDataRowに変換する拡張メソッドを定義すると便利です。
どうして?
DataRowの型を型引数で渡せるので一度メソッドを記述してしまえば、汎用的に使用できます。
どうすれば?
ソースコードを記載します。
ソースコード
using System; using System.Data; using System.Web.UI.WebControls; namespace Extensions { public static class DataSetExtensions { /// <summary> /// <see cref="System.Web.UI.WebControls.RepeaterItem" /> のインスタンスを型指定されたDataRowに変換します。 /// </summary> /// <typeparam name="T">型指定されたDataRowの型。</typeparam> /// <param name="self"><see cref="System.Web.UI.WebControls.RepeaterItem" /> のインスタンス</param> /// <returns>変換されたDataRow。</returns> public static T ToDataRow<T>(this RepeaterItem self) where T : DataRow { T dataRow = self.DataItem as T; if(dataRow != null) return dataRow; DataRowView rowView = self.DataItem as DataRowView; if(rowView == null) { throw new System.ArgumentException("RepeaterコントロールにDataTableが関連付けられていません。"); } return rowView.Row as T; } } }
使い方
こんな風に使います。
<asp:Repeater ID="repeater" runat="server"> <ItemTemplate> <div> <%# Container.ToDataRow<HogeDataSet.FugaRow>().foo %> </div> </ItemTemplate> </asp:Repeater>