方法 : DataList 項目を実行時にカスタマイズする
更新 : 2007 年 11 月
ページの処理中に、DataList コントロールはページに表示する個別の項目を作成します。項目を作成時にカスタマイズするには、DataList コントロールで 2 つのイベントを発生させる必要があります。
ItemCreated イベントは、DataList コントロールが各項目、交互の項目、ヘッダー、フッターなどを作成するときに発生します。
ItemDataBound イベントは、項目内のコントロールがデータにバインドされた後に発生します。イベント パラメータを使用すると、データ バインディングに使用されているデータにアクセスできます。このイベントは、データに依存するカスタマイズを行う場合に使用します。
以上のイベントに応答することにより、項目を変更できます。一般的な使用法としては、項目に表示されるデータに基づいて項目の表示形式を変更します。たとえば、データベースから読み取った数値が負である場合に、項目の背景色を赤に設定できます。
ItemCreated イベントを使用して実行時に項目をカスタマイズするには
DataList コントロールの ItemCreated イベントのイベント ハンドラを作成します。
イベント ハンドラで、e イベント引数オブジェクトの Item オブジェクトを使用して現在の項目を取得します。現在の項目のインデックスは Item オブジェクトの ItemIndex プロパティを通じて使用でき、その型は ItemType プロパティ (ListItemType 列挙体を使用して定義されます) を通じて使用できます。
メモ : ItemIndex プロパティは、Item オブジェクト、AlternatingItem オブジェクト、および SelectedItem オブジェクトに対してのみ正の値を返します。ヘッダー、フッター、および区切り記号項目のインデックス値は -1 です。
項目の背景色を条件付きで変更する方法の例を次に示します。この例では、ItemType プロパティと ListItemType 列挙型を使用して項目の背景色を設定します。項目は LightGoldenrodYellow に、交互の項目は DarkGoldenrod に、選択された項目は Yellow に設定されます。
Protected Sub DataList1_ItemCreated(ByVal sender As Object, _ ByVal e As EventArgs) Select Case e.Item.ItemType Case ListItemType.Item e.Item.BackColor = _ System.Drawing.Color.LightGoldenrodYellow Case ListItemType.AlternatingItem e.Item.BackColor = System.Drawing.Color.DarkGoldenrod Case ListItemType.SelectedItem e.Item.BackColor = System.Drawing.Color.Yellow Case Else ' Add code here to hand the header, footer, and ' separator templates. End Select End Sub
protected void DataList1_ItemCreated(object sender, EventArgs e) { switch (e.Item.ItemType) { case ListItemType.Item : e.Item.BackColor = System.Drawing.Color.LightGoldenrodYellow; break; case ListItemType.AlternatingItem : e.Item.BackColor = System.Drawing.Color.DarkGoldenrod; break; case ListItemType.SelectedItem : e.Item.BackColor = System.Drawing.Color.Yellow; break; default : // Add code here to handle the header, footer, and // separator templates. break; } }
ItemCreated イベントが発生した時点では、テンプレートの個別のコントロールはデータにバインドされていません。ただし、データは ItemDataBound イベントで取得できます。
ItemDataBound イベントを使用して実行時に項目をカスタマイズするには
DataList コントロールの ItemDataBound イベントのイベント ハンドラを作成します。
イベント ハンドラ内で、処理の対象は Item、AlternatingItem、または EditItem であり、ヘッダーやフッターではないことをテストします。
DataItem プロパティを使用して、コントロールにバインドされて比較の対象として使用されるデータをテストします。
データに基づいて条件テストを行う方法の例を示します。この例では、イベント引数の DataItem プロパティが DataRowView オブジェクトとしてキャストされます。次に、現在の DataItem から Quantity という名前のフィールドを抽出します。数量が 10 未満であった場合、DataList コントロール内の項目が赤で表示されます。
Protected Sub DataList1_ItemDataBound(ByVal sender As Object, _ ByVal e As DataListItemEventArgs) If e.Item.ItemType = ListItemType.Item Or _ e.Item.ItemType = ListItemType.AlternatingItem Then Dim drv As System.Data.DataRowView = _ CType(e.Item.DataItem, System.Data.DataRowView) Dim quantity As Integer = _ Integer.Parse(drv.Row("Quantity").ToString()) If (quantity < 10) Then e.Item.BackColor = System.Drawing.Color.Red End If End If End Sub
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) { if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { System.Data.DataRowView drv = (System.Data.DataRowView)(e.Item.DataItem); int quantity = int.Parse(drv.Row["Quantity"].ToString()); if (quantity < 10) { e.Item.BackColor = Color.Red; } } }