ASP+リストバインディングコントロールを使用します
ニキル・コタリ
Microsoft Corporation
2000年7月
要約:ASP+リピーター、Datalist、Datagrid Serverコントロールを説明します。これらのコントロールは、データソース、HTMLベースのアプリケーションユーザーインターフェイスを実現できます。これらのコントロールに関連する概念について話し合い、これらのコントロールを使用する基本的な例を要約します。
目次
簡単な紹介
リストバインディングコントロールはどのように機能しますか?
リピーター制御
データリスト制御
Datagridコントロール
リピーター、データリスト、またはデータグリッド?
関連リソース
この記事に関連するサンプルファイル(56 kb)をダウンロードしてください。
簡単な紹介
リピーター、Datalist、およびDatagrid Controlは、ASP+ページフレームワークのWeb.WebControlsの名前空間に関連するWebコントロールセットを構成します。これらのコントロールは、バインディングリストのコンテンツまたはHTMLディスプレイのデータソースを作成します。したがって、彼らは集合的に「リストバインディングコントロール」と呼んでいます。
フレームワーク内の他のWebコントロールと同様に、これらのコントロールは一貫したプログラミングモデルを提供し、ブラウザとは無関係に代表的なロジックをカプセル化します。これらの特性により、開発者はHTMLに関連する一貫性のない複雑な技術知識を習得することなく、オブジェクトモデルでプログラムできます。
これらの3つのコントロールは、さまざまなレイアウト(リスト、列/新聞列、ストリームレイアウト(HTMLストリーム)を含む)に従って、関連するデータソースに関連するデータソースコンテンツを表すことができます。さらに、完全に異なるレイアウトまたは完全にカスタマイズされたレイアウトを作成することもできます。パッケージのロジックに加えて、送信されたデータの処理、実行ステータス管理、トリガーイベントの機能も提供します。最後に、選択、編集、ページング、並べ替えなど、標準操作のさまざまなレベルのサポートも提供します。これらのコントロールは、レポート、ショッピングカート、製品リスト、クエリ結果、ナビゲーションメニューなど、いくつかの一般的なWebアプリケーションを簡素化できます。
以下は、これらのコントロールと、Webアプリケーションでそれらを使用する方法と、コントロールを選択する方法をさらに説明します。
リストバインディングコントロールはどのように機能しますか?
このセクションは、この記事の残りの残りの背景素材です。概要これらのリストバインディングコントロールの作業方法、それらの共通の特性、および特定の関連概念を概要します。
DataSource属性
各コントロールには、system.collections.icollectionである型でdataSource属性があります。最も単純な言葉では、データソースは同様のオブジェクトのリストまたはコレクションです。
このフレームワークのいくつかのオブジェクトは、Icollectionの実装を提供します。このコレクションには、system.data.dataview(通常、リレーショナルデータベースとXMLデータにアクセスするために使用されます)、一般的なicollection実装(ArrayListやHashtableなど)、および配列が含まれます。
従来のデータバインディングコントロール(通常はADOレコードセットが必要です)とは異なりますが、ICollectionインターフェイスを実装することを除き、これらのリストバインディングコントロールはデータソースの他の要件を強化しません。設計によると、有効なDataSource属性値として大量に使用できるタイプとデータ構造があり、アプリケーションコードのシンプルで柔軟性を最大化できます。
プロジェクトコレクション
各リストバインディングコントロールには、プロジェクトセットが含まれています。コントロールは、これらのオブジェクトの現在のデータソースをリストすることにより、プロジェクトコレクションに設定されます。各オブジェクトに単一のアイテムを作成し、それを使用してオブジェクトを表します。これらの項目は、リストバインディングコントロールに含まれる制御階層構造の一部です。
以下の表には、データソースに関連付けられたプロジェクトのタイプを示します。
プロジェクトによって作成されたデフォルトのプロジェクトタイプ
altalingItemは、プロジェクトコレクションに奇妙な入札を伴うプロジェクト作成です
SelectedItemは、選択したプロジェクト用に作成されます(プロジェクトが代替プロジェクトであるかどうかに関係なく)
edititemは、編集モードのプロジェクト用に作成されます(選択されているか代替であるか)
コントロールは、使用される次のアイテムで同時に作成されます。ただし、データソースデータには関連付けられていません。
ヘッダーは、ヘッダー情報を表すために使用されます
脚注は、足場の情報を示すために使用されます
セパレーターは、図1に示す各アイテム間のコンテンツを表すために使用され、リピーターとデータリストにのみ適用されます
ページングシンボルは、Datagridコントロールに関連付けられたページネーションUIを示すために使用されます
図1。「コントロール」コレクションの「プロジェクト」コレクションと比較
プロジェクトデータの拘束力と作成
リストバインディングコントロールは、ASP+フレームワーク全体に実装されている明示的なデータバインディングモデルに従います。これは、データビンドメソッドが呼び出された場合にのみ、コントロールをリストする必要があることを意味します。
DataBindメソッドが呼び出されると、リストコントロールはデータソースをリストし、プロジェクトを作成し、データソースから値を抽出して初期化します。ステータス管理が有効になっている場合、コントロールは、データソースを再設定することなく、ページの返品処理期間中にプロジェクトを再作成するために必要なすべての情報を保存します。
明示的なデータバインディングモデルにより、アプリケーションコードは、処理シーケンスでデータソースがいつ、どこで必要であるかを正確に決定できます。この機能により、データベースサーバーへのアクセスがますます効率的になり、これらのアクセスは通常、Webアプリケーションの最も消費される操作です。
一般的なルールは、プロジェクトを再作成する必要があるときはいつでもデータビンに呼び出されなければならないということです。ほとんどの場合、ページがリクエストされたときに初期のプロジェクトコレクションを初めて作成するときにDataBindに電話します。このページのフォローアップ実行中に、プロジェクトコレクションによって変更されるさまざまなイベント処理手順でこのメソッドを呼び出す必要があります。これは、初期データソースの作成に使用されるクエリが発生する可能性がある場合に発生します。これは、プロジェクトのステータスが変更されたときにも発生する可能性があります(編集モードのみに変更するなど)。
スタイル
オブジェクトモデルでスタイル属性を使用することにより、すべてのDataListコントロールとDatagridコントロールとそれに含まれる形式と外観を定義できます。これらの属性は、フォント、色、境界線、その他の外観要因をカスタマイズすることができます。コントロール自体のスタイル属性(前景の色、背景色、フォント、ボーダースタイルなど)は、コントロール全体の表現に影響します。
さらに、各コントロールには、ItemStyle、AlternatingEmstyle、HeaderSstyleなど、作成したアイテムの種類に一致する多数のスタイル属性が含まれています。 Datagridは、特定の列のすべてのセルに影響を与える3番目のレベルスタイルの属性を提供します。コントロールに含まれる各列には、独自のヘッドレルスティル、フッターシル、およびItemStyteがあります。
テンプレート
スタイル制御形式が表示され、テンプレートは各アイテムのコンテンツと表現を定義します。テンプレートは、プロジェクトを表すために使用される制御階層構造を定義するHTMLコードシートと考えることができます。
リピーターとデータリストのコントロールは、指定されたテンプレートによって駆動され、ItemTemplate、AlternatingItemtemplate、HeaderTemplateなどのさまざまな設定可能なテンプレートプロパティを提供します。スタイルと同様に、各テンプレートは特定のタイプのプロジェクトに対応しています。
Datagridコントロールはテンプレートではありません。ただし、コントロールコレクションのテンプレートコラムは、Datagridでテンプレートを使用します。 Templatecolumの各セルには、リピーターまたはデータリスト制御のアイテムに非常に似たテンプレートを含めることができます。これにより、Datagridでのカスタマイズも可能になります。
テンプレート内のデータバインディング
テンプレート定義項目に含まれる制御階層構造。データ結合式を使用することにより、このレベル構造の制御属性は、このプロジェクトに関連付けられたデータプロパティにバインドできます。
テンプレートとしての論理親レベルプロジェクトは、データバインディング式の「コンテナ」と呼ばれます。各コンテナには、Dataitemと呼ばれる属性があり、関連するデータを引用しています。その結果、テンプレート内の典型的なデータ結合式のほとんどは、コンテナの特定のプロパティの制御属性を結合します。dataitem。この結合については、次の例でさらに説明します。
リピーター制御
前述のように、リピーター制御はテンプレートによって完全に駆動され、完全にカスタマイズされた表現とレイアウトが可能になります。以下の図は、この機能を示しています。
図2。リピーターコントロールを使用して生成されたリンクされたプロジェクト記号のリンクリスト
Repeater1.aspxから抜粋:
<%@ページ言語= c#src = repeater1.cs継承= samples.repeter1page%>
弾性
<ASP:リピーターranat = server id = linksleistrepeater
dataSource = '<%#siteLinks%>'>
<テンプレートname = headertemplate>
<ul type = 1>
</テンプレート>
<テンプレートname = itemtemplate>
<li>
<ASP:HyperLink Runat =サーバー
text = '<%#databinder.eval.eval(container.dataitem、site)%>'
navigateurl = '<%#databinder.eval.eval.dataitem、siteurl)%>'>
</asp:hyperlink>
</li>
</テンプレート>
<テンプレートname = footertemplate>
</ul>
</テンプレート>
</asp:リピーター>
この.aspxファイルは、プロジェクトシンボルのリストを生成するためにリピーターコントロールを生成するというステートメントを示しました。
この例は、データバインド構文(<%#...%>)を使用してデータソースを設定するステートメント方法を示しています。 DataBindメソッドを呼び出すと、データバインディングの式が実行されます。この場合、リピーターのDataSourceプロパティはページ上のSiteLinksプロパティにバインドされ、後者には表示されるURL参照が含まれています。
リピーターは、HTMLフラグメントがテンプレートに存在することを可能にする唯一のコントロールです。この例では、プロジェクトシンボルのリストは3つの部分に分かれています。
headertemplate(<ul type = 1>)のリストによって開始されました。
footertemplateで表されるリストでラベル(</ul>)を終了します。
リストの本体は、SiteLinksセットの各オブジェクトのitemTemplateを繰り返すことによって生成されたリストアイテム(<li>)から配置されます。
また、これらのテンプレートを使用して、ヘッダーのstartマーク(<table>)を指定することもできます。エンドラベル(</table>)は脚注のテーブルを指定し、各プロジェクトの単一の時計ライン(<te>)を指定することもできます。エッセンスこの交換オプションは、リスト表現につながります。
itemtemplateを指定する必要があります。それが唯一の必要なテンプレートです。他のテンプレートが指定されていない場合、コントロールは他のテンプレートにこのitemTemplateを自動的に使用します。
次の例では、ItemTemplateにはハイパーリンクWebコントロールが含まれています。このコントロールのテキストとNavigateUrl属性は、各複製プロジェクトに関連付けられたデータプロパティに拘束されます。これは、データバインディング式を使用して完了します(プロジェクトの作成後すぐに式を探します)。
Repeater1.cs:
名前空間サンプル{
弾性
public class Repeater1Page:Page {
保護されたリピーターlinksleistrepeater;
public Icollection siteLinks {
得る {
arrayList sites = new ArrayList();
sites.add(new SiteInfo(Microsoft Home、
http://www.microsoft.com);
sites.add(new siteinfo(msdn home、
http://msdn.microsoft.com);
sites.add(new SiteInfo(MSN HomePage、
http://www.msn.com));
sites.add(new SiteInfo(hotmail、
http://www.hotmail.com));
戻りサイト;
}
}
保護されたオーバーライドvoidオーバーロード(eventargs e){{{
base.onload(e);
if(!ispostback){
//初めてページを要求すると、データバインディングが実行されます。
//これにより、このページの制御階層構造で各コントロールを再帰的に呼び出します。
databind();
}
}
}
パブリックシールクラスのsiteinfo {
プライベート文字列サイト。
private string siteurl;
public siteinfo(string sitename、string siteurl){{
this.sitename = sitename;
this.siteurl = siteurl;
}
パブリック文字列サイト{
get {returnサイト;}
}
public string siteurl {
geturn siteurl;}
}
}
}
この.csファイルには、前のリストのASPXページに一緒に表示されるコードが含まれています。
Repeater1Pageクラスは、ページクラスのオンロード方法をカバーしています。これは、このページの最初のリクエストでDatabindが呼び出されることを示しています。これにより、これらのページのデータバインディング式がデータを評価し、リピーター制御リストをデータのソースにし、プロジェクトを作成します。最初のリクエストの場合にのみ、DataBindメソッドを呼び出します。これが機能する理由は、リピーターがデータソースインスタンスを必要とせずに、以前に保存されたステータスの返品プロセスでプロジェクトを再作成できるためです。
このページは、タイプICOLLECTIONのパブリック属性を明らかにしています。これは、リピーターのDataSource属性値のデータ結合式で使用されます。属性の取得は、SiteINFOシーケンスのセットを含むArrayListを使用します。この属性は公開されています。なぜなら、パブリックおよび保護メンバーのページのみがデータバインディング式で使用できるからです。
各SiteINFOオブジェクトには、SiteNameとSiteurlの2つの属性があります。テンプレート内のハイパーリンク制御のデータバインディングの場合、これらの属性にアクセスします。このコントロールの結合式で、Container.Dataitemは、特定のアイテムを単一のSiteINFOオブジェクトにバインドする必要があると述べました。 databinder.eval(container.dataitem、siteName)現在のSiteInfoオブジェクトのSITENAMEプロパティにアクセスします。
Repeater1の例では、いくつかの基本的な概念を紹介します。
定義テンプレート
テンプレート内のデータ結合文法とデータ結合式
ArrayListのICOLLECTIONをデータソースとして使用します
初期処理ページでDataBindメソッドを呼び出します
データリスト制御
Datalist Controlは、スタイル属性を使用してその能力をフォーマットする機能を提供するテンプレート指向のコントロールです。また、複数の列を生成することもできます。図3は、これら2つの特性を示しています。
図3。Datalistのデュアル列から生成された例
Datalist1.aspxからの抜粋:
<%@ページ言語= c#src = datalist1.cs継承= samples.datalist1page%>
弾性
<asp:datalist runat = server id = peicaldatalist
RepeatColumns = 2 Repeat -Direction = Vertical RepeatMode = Table
幅= 100%>
<Poperty name = AlternatingItemStyle>
<ASP:TableItemStyle backcolor =#elyeee/>
</property>
<テンプレートname = itemtemplate>
<ASP:パネルrunat =サーバーfont-size = 12pt font-bold = true>
<%#((person)container.dataitem).name%>
</asp:パネル>
<ASP:ラベルrunat = server width = 20px
BorderStyle = Solid BorderWidth = 1PX BorderColor = Black
backcolor = '<%#((person)container.dataitem)
</asp:label>
<ASP:ラベルrunat = server font-size = 10pt
text = '<%#getColorname((人)container.dataitem)%>'>
</asp:label>
</テンプレート>
</asp:datalist>
この.aspxファイルは、この例を生成するために使用されるデータリストのステートメントを示しました。
この例では、DataListのマルチカラムレイアウトは、RepeatColumnsプロパティを「2」に設定することで達成されます。繰り返し方向を「垂直」に設定すると、プロジェクトが上から下に配置され、左から右に配置されます。逆に、「水平」に設定された値により、プロジェクトは左から右、そして上から下に配置されます。
ASPX構文には、いくつかのDataListスタイルの属性の設定が含まれています。この例では、Datalistの幅は親レベルの100%に設定されています。灰色の背景を持つ交互の項目は、縞模様の外観を得ることです。また、この例は、テンプレートに、各プロジェクトで理想的なレイアウトを取得するためのニーズを満たすために、複雑な制御定義を含めることができることも示しています。
最後に、このテンプレートのデータ結合式は、container.dataitemをそのタイプに変換することにより、初期段階で結合します。これは、DataBinder.evalの使用の後の結合の後の結合の後の結合を引き起こしません(Repeater1に示されています)。ただし、この方法では読みやすくなる可能性があります。次の例は、getColornameメソッドを呼び出す式の例も示しています(この方法は、このページでサポートされているファイルに実装されています)。
datalist1.cs:
名前空間サンプル{
弾性
public class datalist1page:page {
保護されたデータリスト人団体;
保護された文字列getcolorname(color c){
戻る
typedescriptor.getConverter(typeof(color))。
}
prive void loadpeicallist(){
//データソースを作成します
person [] People = new Person [] {
新しい人(Nikhil Kothari、Color.Green)、
新しい人(Steve Millet、color.purple)、color.purple)、
新しい人(Chris Anderson、Color.Blue)、Color.Blue、
新しい人(マイク・ポープ、カラー。オレンジ)、
新しい人(Anthony Moore、color.yllow)、
新しい人(Jon Jung、Color.Mediumaquamarine)、
新しい人(スーザン・ウォーレン、color.slateblue)、
新しい人(Izzy Gryko、color.red)
};
//コントロールのデータソースを設定します
PeicalDatalist.DataSource = Pesple;
//このデータソースを使用してプロジェクトを構築するためにコントロールを使用させる
peicaldatalist.databind();
}
保護されたオーバーライドvoidオーバーロード(eventargs e){{{
base.onload(e);
if(!ispostback){
//このページを初めて参照してください
loadpeicallist();
}
}
}
公共の封印されたクラスの人{
プライベート文字列名;
プライブな色のお気に入り;
パブリックパーソン(文字列名、Color FaveiteColor){{
this.name = name;
this.favoriteColor = faveiteColor;
}
パブリックカラーのfaveitecolor {
Geturn faveitecolor;}
}
パブリックストリング名{
geturn name;}
}
}
}
このページでは、コントロールのDataSource属性がプログラム設定を介して設定されており、ASPXファイルに解決されます。 2つの方法の結果は同じです。どのような方法を選択できないかは、データソースをリストして示したいアイテムを作成できるように、DataBindメソッドを呼び出す必要があります。
この例で使用されるデータソースは、単純な個人オブジェクトです。各配列はICOLLECTIONメソッドを実装するため、配列はデータソースに適しています。これは、データソースを取得できるときにデータ構造とタイプを取得できるときに取得できる柔軟性を示しています。
datalist1例次の概念を紹介します。
テンプレート内のリッチHTML UIを定義します
データソースとして簡単な配列を使用します
プログラムを通じてデータソースを設定します
データバインド構文で許可されるさまざまな式