[ ASP.NET ] GridView.DataSource に配列を設定して表示する

Pocket

ここでは、GridView のデータソースに配列を設定しリスト表示するサンプルコードを掲載しています。 使用するサンプルでは、DateTime 型配列を GridView で表示しています。表示している項目は以下の通りです。

スポンサーリンク

  1. DateTime.DayOfWeek プロパティ(Eval メソッドを使用)
  2. DateTime.DayOfWeek プロパティ(DataBinder.Eval Shared メソッドを使用)
  3. GridViewRow.RowIndex プロパティ
サンプルコード

ASPX

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" >
        <Columns>

            <!-- DayOfWeek プロパティ (使用時にはこのコメントは削除すること)-->
            <asp:TemplateField HeaderText="Eval" >
                <ItemTemplate>
                    <%#Eval("DayOfWeek")%>
                </ItemTemplate>
            </asp:TemplateField>

            <!-- DayOfWeek プロパティ (使用時にはこのコメントは削除すること)-->
            <asp:TemplateField HeaderText="DataBinder.Eval" >
                <ItemTemplate>
                    <%#DataBinder.Eval(Container.DataItem, "DayOfWeek")%>
                </ItemTemplate>
            </asp:TemplateField>

            <!-- RowIndex (使用時にはこのコメントは削除すること)-->
            <asp:TemplateField HeaderText="GridViewRow.RowIndex">
                <ItemTemplate>
        
                    <!-- VB の場合 (使用時にはこのコメントは削除すること) -->
                    <%# CType(Container,GridViewRow).RowIndex %>
        
                    <!-- C# の場合 (使用時にはこのコメントは削除すること) -->
                    <%# ((GridViewRow)Container).RowIndex %>
                        
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

VB.NET

    ' DateTimeオブジェクトの配列を生成する
    Dim dts() As DateTime = {New DateTime(2001, 1, 1), _
                             New DateTime(2002, 2, 2), _
                             New DateTime(2003, 3, 3)}

    '配列をデータソースに設定
    GridView1.DataSource = dts
    'バインド
    GridView1.DataBind()

C#

    // DateTimeオブジェクトの配列を生成する
    DateTime[] dts = {new DateTime(2001, 1, 1), 
                      new DateTime(2002, 2, 2), 
                      new DateTime(2003, 3, 3)};

    // 配列をデータソースに設定
    GridView1.DataSource = dts;
    // バインド
    GridView1.DataBind();
出力結果

サンプルコードを実行すると以下のリストが出力されます。

EvalDataBinder.EvalGridViewRow.RowIndex
MondayMonday0
SaturdaySaturday1
MondayMonday2
Container

ASPX ファイル内で使用している Container は、GridView コントロールの行単位の情報が 入っている入れ物 ( GridViewRow ) です。ASP.NET が自動で作成しますので、特別に記述する必要はありません。 GridView コントロールを使用している場合は GridViewRow オブジェクトであり、Repeater コントロールを使用している場合は RepeaterItem となるように定義によって型が異なります。Container をキャストして 各コントロールの行オブジェクト として使用します。また、オブジェクト型を返す Container.DataItem はバインドされた配列の要素を返します。上記の例では、DateTime オブジェクトということになります。

Eval メソッド と DataBinder.Eval Shared(static) メソッド

Eval メソッドは、Container.DataItem のプロパティ定義をパラメータに与え、 その結果 ( ToString )を返すメソッドです。今回のサンプルでは、DateTime.DayOfWeek.ToString になります。 一方の DataBinder.Eval メソッドは、Eval メソッドを汎用的にしたもので 第1パラメータに任意のコンテナを与えることができます。今回の例では、わざわざ DataBinder.Eval Shared メソッドを使用する必要はないかもしれません。

IEnumerable インターフェース

ここでは、配列を DataSource に設定する例を示しましたが、ユーザ定義クラスの配列であっても設定できますし、DirectoryInfo( ディレクトリパス ).GetFiles メソッドで返される FileInfo クラス配列でディレクトリ内のファイルの リストをグリッドビューに表示したりすることもできます。DataSourceに設定する条件は、IEnumerable インターフェースを実装したクラス ( 構造体 ) です。

参考

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *