e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
190 lines
6.0 KiB
C#
190 lines
6.0 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="DataListItem.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web.UI.WebControls {
|
|
|
|
using System;
|
|
using System.Collections;
|
|
using System.ComponentModel;
|
|
using System.Web.UI;
|
|
using System.Web.Util;
|
|
|
|
/// <devdoc>
|
|
/// <para>Represents an item in the <see cref='System.Web.UI.WebControls.DataList'/>. </para>
|
|
/// </devdoc>
|
|
[
|
|
ToolboxItem(false)
|
|
]
|
|
public class DataListItem : WebControl, IDataItemContainer {
|
|
|
|
private int itemIndex;
|
|
private ListItemType itemType;
|
|
private object dataItem;
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.Web.UI.WebControls.DataListItem'/> class.</para>
|
|
/// </devdoc>
|
|
public DataListItem(int itemIndex, ListItemType itemType) {
|
|
this.itemIndex = itemIndex;
|
|
this.itemType = itemType;
|
|
}
|
|
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Represents an item in the <see cref='System.Web.UI.WebControls.DataList'/>. </para>
|
|
/// </devdoc>
|
|
public virtual object DataItem {
|
|
get {
|
|
return dataItem;
|
|
}
|
|
set {
|
|
dataItem = value;
|
|
}
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Indicates the index of the item in the <see cref='System.Web.UI.WebControls.DataList'/>. This property is
|
|
/// read-only.</para>
|
|
/// </devdoc>
|
|
public virtual int ItemIndex {
|
|
get {
|
|
return itemIndex;
|
|
}
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Indicates the type of the item in the <see cref='System.Web.UI.WebControls.DataList'/>.</para>
|
|
/// </devdoc>
|
|
public virtual ListItemType ItemType {
|
|
get {
|
|
return itemType;
|
|
}
|
|
}
|
|
|
|
public override bool SupportsDisabledAttribute {
|
|
get {
|
|
return RenderingCompatibility < VersionUtil.Framework40;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// </devdoc>
|
|
protected override Style CreateControlStyle() {
|
|
return new TableItemStyle();
|
|
}
|
|
|
|
|
|
/// <internalonly/>
|
|
/// <devdoc>
|
|
/// </devdoc>
|
|
protected override bool OnBubbleEvent(object source, EventArgs e) {
|
|
if (e is CommandEventArgs) {
|
|
DataListCommandEventArgs args = new DataListCommandEventArgs(this, source, (CommandEventArgs)e);
|
|
|
|
RaiseBubbleEvent(this, args);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Displays a <see cref='System.Web.UI.WebControls.DataListItem'/> on the client.</para>
|
|
/// </devdoc>
|
|
public virtual void RenderItem(HtmlTextWriter writer, bool extractRows, bool tableLayout) {
|
|
HttpContext con = Context;
|
|
if ((con != null) && con.TraceIsEnabled) {
|
|
int presize = con.Response.GetBufferedLength();
|
|
|
|
RenderItemInternal(writer, extractRows, tableLayout);
|
|
|
|
int postsize = con.Response.GetBufferedLength();
|
|
con.Trace.AddControlSize(UniqueID, postsize - presize);
|
|
}
|
|
else
|
|
RenderItemInternal(writer, extractRows, tableLayout);
|
|
}
|
|
|
|
private void RenderItemInternal(HtmlTextWriter writer, bool extractRows, bool tableLayout) {
|
|
if (extractRows == false) {
|
|
if (tableLayout) {
|
|
// in table mode, style information has gone on the containing TD
|
|
RenderContents(writer);
|
|
}
|
|
else {
|
|
// in non-table mode, the item itself is responsible for putting
|
|
// out the style information
|
|
RenderControl(writer);
|
|
}
|
|
}
|
|
else {
|
|
IEnumerator controlEnum = this.Controls.GetEnumerator();
|
|
Table templateTable = null;
|
|
bool hasControls = false;
|
|
|
|
while (controlEnum.MoveNext()) {
|
|
hasControls = true;
|
|
Control c = (Control)controlEnum.Current;
|
|
if (c is Table) {
|
|
templateTable = (Table)c;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (templateTable != null) {
|
|
IEnumerator rowEnum = templateTable.Rows.GetEnumerator();
|
|
while (rowEnum.MoveNext()) {
|
|
TableRow r = (TableRow)rowEnum.Current;
|
|
r.RenderControl(writer);
|
|
}
|
|
}
|
|
else if (hasControls) {
|
|
// there was a template, since there were controls but
|
|
// none of them was a table... so throw an exception here
|
|
throw new HttpException(SR.GetString(SR.DataList_TemplateTableNotFound,
|
|
Parent.ID, itemType.ToString()));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <internalonly/>
|
|
/// <devdoc>
|
|
/// </devdoc>
|
|
protected internal virtual void SetItemType(ListItemType itemType) {
|
|
this.itemType = itemType;
|
|
}
|
|
|
|
|
|
|
|
/// <internalonly/>
|
|
/// <devdoc>
|
|
/// </devdoc>
|
|
object IDataItemContainer.DataItem {
|
|
get {
|
|
return DataItem;
|
|
}
|
|
}
|
|
|
|
int IDataItemContainer.DataItemIndex {
|
|
get {
|
|
return ItemIndex;
|
|
}
|
|
}
|
|
|
|
int IDataItemContainer.DisplayIndex {
|
|
get {
|
|
return ItemIndex;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|