次の方法で共有


DataList コントロールで複数のレコードを行ごとに表示する (VB)

作成者: Scott Mitchell

PDF のダウンロード

この短いチュートリアルでは、RepeatColumns および RepeatDirection プロパティを使用して DataList のレイアウトをカスタマイズする方法について説明します。

はじめに

これまでの 2 つのチュートリアルで見た DataList の例では、データ ソースの各レコードが 1 列の HTML <table> の行としてレンダリングされていました。 これが DataList の既定の動作ですが、複数列の複数行テーブルにデータ ソース項目が分散されるように DataList の表示をカスタマイズするのはとても簡単です。 さらに、すべてのデータ ソース項目を 1 行の複数列 DataList に表示できます。

DataList のレイアウトは、RepeatColumns および RepeatDirection プロパティを使用してカスタマイズできます。これらは、それぞれ、レンダリングされる列の数と、それらの項目が垂直と水平のどちらの方向にレイアウトされるかを示します。 たとえば、図 1 は、3 つの列があるテーブルに製品情報を表示する DataList を示しています。

The DataList Shows Three Products per Row

図 1: DataList で 1 行あたり 3 つの製品を表示しています (クリックするとフルサイズの画像が表示されます)

1 行あたり複数のデータ ソース項目を表示することで、DataList で水平方向の画面領域をより効果的に利用できます。 この短いチュートリアルでは、これら 2 つの DataList プロパティについて説明します。

手順 1: DataList で製品情報を表示する

RepeatColumns および RepeatDirection プロパティについて調べる前に、まず、標準の 1 列で複数行のテーブル レイアウトを使用して、製品情報を一覧表示する DataList をページに作成しましょう。 この例では、次のマークアップを使用して、製品名、カテゴリ、価格を表示します。

<h4>Product Name</h4>
Available in the Category Name store for Price

DataList にデータをバインドする方法は前の例で見たので、これらの手順は簡単に進めます。 DataListRepeaterBasics フォルダー内の RepeatColumnAndDirection.aspx ページを開くことから始めて、ツールボックスからデザイナーに DataList をドラッグします。 DataList のスマート タグから、新しい ObjectDataSource を作成し、ウィザードの INSERT、UPDATE、DELETE タブから (None) オプションを選択して、ProductsBLL クラスの GetProducts メソッドからデータを取得するように構成します。

新しい ObjectDataSource を作成して DataList にバインドすると、Visual Studio で ItemTemplate が自動的に作成されます。これは、各製品データ フィールドの名前と値を表示します。 宣言型マークアップを使用して直接、または DataList のスマート タグの [テンプレートの編集] オプションから、上記のマークアップを使用するように ItemTemplate を調整します。Product NameCategory NamePrice のテキストは Label コントロールに置き換えます。これにより、適切なデータ バインド構文を使用して Text のプロパティに値が割り当てられます。 ItemTemplate を更新後、このページの宣言型マークアップは次のようになります。

<asp:DataList ID="DataList1" runat="server" DataKeyField="ProductID"
    DataSourceID="ObjectDataSource1" EnableViewState="False">
    <ItemTemplate>
        <h4>
            <asp:Label runat="server" ID="ProductNameLabel"
                Text='<%# Eval("ProductName") %>'></asp:Label>
        </h4>
        Available in the
            <asp:Label runat="server" ID="CategoryNameLabel"
                Text='<%# Eval("CategoryName") %>' />
        store for
            <asp:Label runat="server" ID="UnitPriceLabel"
                Text='<%# Eval("UnitPrice", "{0:C}") %>' />
    </ItemTemplate>
</asp:DataList>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    OldValuesParameterFormatString="original_{0}"
    SelectMethod="GetProducts" TypeName="ProductsBLL">
</asp:ObjectDataSource>

UnitPriceEval データバインド構文に、戻り値を通貨として書式設定する書式指定子を含めていることに注意してください - Eval("UnitPrice", "{0:C}").

少し時間を取ってブラウザーでページにアクセスします。 図 2 に示すように、DataList は 1 列で複数行の製品テーブルとしてレンダリングされます。

By Default, the DataList Renders as a Single-Column, Multi-Row Table

図 2: 既定では、DataList は 1 列の複数行テーブルとしてレンダリングされます (クリックするとフルサイズの画像が表示されます)

手順 2: DataList のレイアウト方向を変更する

DataList の既定の動作では、1 列の複数行テーブルに項目を垂直方向にレイアウトしますが、この動作は DataList の RepeatDirection プロパティを使用して簡単に変更できます。 RepeatDirection プロパティは、2 つの可能な値のいずれかを受け取ることができます: Horizontal または Vertical (既定値)。

RepeatDirection プロパティを Vertical から Horizontal に変更することで、DataList でレコードを 1 行にレンダリングし、データ ソース項目ごとに 1 つの列を作成します。 この効果を示すには、デザイナーで DataList をクリックし、次にプロパティ ウィンドウで RepeatDirection プロパティを Vertical から Horizontal に変更します。 そうするとすぐに、デザイナーで DataList のレイアウトが調整され、1 行の複数列インターフェイスが作成されます (図 3 を参照)。

The RepeatDirection Property Dictates How the Direction the DataList s Items are Laid Out

図 3: RepeatDirection プロパティによって、DataList の項目の配置方向が決定します (クリックするとフルサイズの画像が表示されます)

少量のデータを表示する場合は、1 行の複数列テーブルが、画面の領域を最大化する理想的な方法である可能性があります。 一方、大量のデータの場合は、1 つの行に多数の列が必要になり、画面に収まらない項目が右にプッシュされます。 図 4 は、1 行の DataList でレンダリングされた場合の製品を示しています。 多数の製品 (80 以上) があるため、ユーザーが各製品に関する情報を表示するには、右にスクロールする必要があります。

For Sufficiently Large Data Sources, a Single Column DataList Will Require Horizontal Scrolling

図 4: データ ソースが多い場合、1 列の DataList では水平スクロールが必要になります (クリックするとフルサイズの画像が表示されます)

手順 3: 複数列の複数行テーブルにデータを表示する

複数列で複数行の DataList を作成するには、RepeatColumns プロパティ を、表示する列の数に設定する必要があります。 既定では、RepeatColumns プロパティは 0 に設定されています。この場合、DataList は、すべての項目を 1 つの行または列 (RepeatDirection プロパティの値による) に表示します。

この例では、テーブル行あたり 3 つの製品を表示します。 したがって、RepeatColumns プロパティを 3 に設定します。 この変更を行った後、少し時間を取ってブラウザーで結果を表示します。 図 5 に示すように、製品は 3 列の複数行テーブルに一覧表示されます。

Three Products are Displayed per Row

図 5: 1 行あたり 3 つの製品が表示されています (クリックするとフルサイズの画像が表示されます)

RepeatDirection プロパティは、DataList 内の項目のレイアウト方法に影響します。図 5 は、RepeatDirection プロパティを Horizontal に設定した結果を示しています。 最初の 3 つの製品 (Chai、Chang、Aniseed Syrup) は、左から右、上から下にレイアウトされていることに注意してください。 次の 3 つの製品 (Chef Anton's Cajun Seasoning 以降) は、最初の 3 つの下の行に表示されています。 ただし、RepeatDirection プロパティを Vertical に戻すと、図 6 に示すように、これらの製品は上から下、左から右にレイアウトされます。

Here, the Products are Laid Out Vertically

図 6: ここでは、製品が垂直方向にレイアウトされています (クリックするとフルサイズの画像が表示されます)

結果のテーブルに表示される行数は、DataList にバインドされたレコードの合計数によって異なります。 正確には、データ ソース項目の合計数の上限を RepeatColumns プロパティ値で割った値です。 Products テーブルには現在 84 個の製品があり、3 で割り切れるので、28 行あります。 データ ソース内の項目数と RepeatColumns プロパティ値が割り切れない場合、最後の行または列には空白のセルが含まれます。 RepeatDirectionVertical に設定されている場合、RepeatDirectionHorizontal であれば、最後の列には空のセルが含まれます。

まとめ

DataList は、既定では1 列の複数行テーブルにその項目を一覧表示します。これは、1 つの TemplateField がある GridView のレイアウトを模倣しています。 この既定のレイアウトのままでもかまいませんが、行ごとに複数のデータ ソース項目を表示することで、画面の領域を最大化できます。 これを実現するには、DataList の RepeatColumns プロパティを、行ごとに表示する列の数に設定するだけです。 さらに、DataList の RepeatDirection プロパティを使用して、複数列、複数行のテーブルの内容を水平方向に左から右、上から下にレイアウトするか、垂直方向に上から下、左から右にレイアウトするかを示すことができます。

著者について

7 冊の ASP/ASP.NET 書籍の著者であり、4GuysFromRolla.com の創設者である Scott Mitchell は、1998 年から Microsoft Web テクノロジに取り組んでいます。 Scott は、独立したコンサルタント、トレーナー、ライターとして働いています。 彼の最新の本は サムズは24時間で2.0 ASP.NET 自分自身を教えています。 にアクセスするか、ブログを使用して にアクセスmitchell@4GuysFromRolla.comできます。これは でhttp://ScottOnWriting.NET見つけることができます。

特別な感謝

このチュートリアル シリーズは、多くの役に立つ校閲者によってレビューされました。 このチュートリアルのリード レビュー担当者は John Suru でした。 今後の MSDN の記事を確認することに関心がありますか? その場合は、 にmitchell@4GuysFromRolla.com行をドロップしてください。