-
+//
+// System.Web.UI.WebControls.DataListItem.cs
+//
+// Author:
+// Sebastien Pouliot <sebastien@ximian.com>
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-/**\r
- * Namespace: System.Web.UI.WebControls\r
- * Class: DataListItem\r
- *\r
- * Authors: Gaurav Vaish, Gonzalo Paniagua (gonzalo@ximian.com)\r
- * Maintainer: gvaish@iitk.ac.in\r
- * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
- * Implementation: yes\r
- * Status: 100%\r
- *\r
- * (C) Gaurav Vaish (2002)\r
- * (c) 2002 Ximian, Inc. (http://www.ximian.com)\r
- */\r
-\r
-using System;\r
-using System.Collections;\r
-using System.Web;\r
-using System.Web.UI;\r
-using System.ComponentModel;\r
-\r
-namespace System.Web.UI.WebControls\r
-{\r
- [ToolboxItem(false)]\r
- public class DataListItem : WebControl, INamingContainer\r
-#if NET_2_0\r
- , IDataItemContainer\r
-#endif\r
- {\r
- int itemIndex;\r
- ListItemType itemType;\r
- object dataItem;\r
-\r
- public DataListItem(int itemIndex, ListItemType itemType)\r
- {\r
- this.itemIndex = itemIndex;\r
- this.itemType = itemType;\r
- }\r
-\r
- public virtual object DataItem\r
- {\r
- get\r
- {\r
- return dataItem;\r
- }\r
- set\r
- {\r
- dataItem = value;\r
- }\r
- }\r
-\r
- public virtual int ItemIndex\r
- {\r
- get\r
- {\r
- return itemIndex;\r
- }\r
- }\r
-\r
- public virtual ListItemType ItemType\r
- {\r
- get\r
- {\r
- return itemType;\r
- }\r
- }\r
-\r
- public virtual void RenderItem (HtmlTextWriter writer, bool extractRows, bool tableLayout)\r
- {\r
- if (extractRows){\r
- Table tbl = null;\r
- foreach (Control ctrl in Controls){\r
- if (ctrl is Table){\r
- tbl = (Table) ctrl;\r
- break;\r
- }\r
- }\r
- \r
- if (tbl == null)\r
- throw new HttpException ("Template table not found!");\r
-\r
- foreach (TableRow row in tbl.Rows)\r
- row.RenderControl (writer);\r
- } else {\r
- if (tableLayout)\r
- RenderContents (writer);\r
- else\r
- RenderControl (writer);\r
- }\r
-\r
- }\r
-\r
- protected override Style CreateControlStyle()\r
- {\r
- return new TableItemStyle();\r
- }\r
-\r
- protected override bool OnBubbleEvent(object source, EventArgs e)\r
- {\r
- if(e is CommandEventArgs)\r
- {\r
- RaiseBubbleEvent(this, new DataListCommandEventArgs(this, source, (CommandEventArgs)e));\r
- return true;\r
- }\r
- return false;\r
- }\r
-\r
- protected internal virtual void SetItemType(ListItemType itemType)\r
- {\r
- if(Enum.IsDefined(typeof(ListItemType), itemType))\r
- {\r
- this.itemType = itemType;\r
- }\r
- }\r
- }\r
-}\r
+
+using System.Collections;
+using System.ComponentModel;
+using System.Security.Permissions;
+
+namespace System.Web.UI.WebControls {
+
+ // CAS
+ [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+ [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+ // attributes
+ [ToolboxItem ("")]
+#if NET_2_0
+ public class DataListItem : WebControl, INamingContainer, IDataItemContainer {
+#else
+ public class DataListItem : WebControl, INamingContainer {
+#endif
+ int index;
+ ListItemType type;
+ object item;
+
+ public DataListItem (int itemIndex, ListItemType itemType)
+ {
+ index = itemIndex;
+ type = itemType;
+ }
+
+ public virtual object DataItem {
+ get { return item; }
+ set { item = value; }
+ }
+
+ public virtual int ItemIndex {
+ get { return index; }
+ }
+
+ public virtual ListItemType ItemType {
+ get { return type; }
+ }
+
+ protected override Style CreateControlStyle ()
+ {
+ return new TableItemStyle (ViewState);
+ }
+
+ // see ... "Building DataBound Templated Custom ASP.NET" on msdn
+ // http://msdn.microsoft.com/library/en-us/dnaspp/html/databoundtemplatedcontrols.asp
+ //
+ // This technique is used in the DataGrid, DataList, and Repeater to handle the
+ // Command event of Buttons, LinkButtons, and ImageButtons within the
+ // controls. Since the button's Command event calls RaiseBubbleEvent(), this
+ // percolates the event up to the button's parent.
+ protected override bool OnBubbleEvent (object source, EventArgs e)
+ {
+ CommandEventArgs ce = e as CommandEventArgs;
+ if (ce != null) {
+ base.RaiseBubbleEvent (this, new DataListCommandEventArgs (this, source, ce));
+ return true;
+ }
+ return false;
+ }
+
+ public virtual void RenderItem (HtmlTextWriter writer, bool extractRows, bool tableLayout)
+ {
+ bool span = (!extractRows && !tableLayout);
+ if (span) {
+ writer.RenderBeginTag (TagKey);
+ }
+
+ if (HasControls ()) {
+ if (extractRows) {
+ bool table = false;
+ foreach (Control c in Controls) {
+ Table t = (c as Table);
+ if (t != null) {
+ table = true;
+ foreach (TableRow tr in t.Rows) {
+ if (ControlStyleCreated && !ControlStyle.IsEmpty) {
+ tr.ControlStyle.MergeWith (ControlStyle);
+ }
+ tr.RenderControl (writer);
+ }
+ break; // ignore all, but the first, table
+ }
+ }
+ if (!table) {
+ // if it has controls then it must have a Table control
+ throw new HttpException ("No Table found in DataList template.");
+ // other controls are ignored (as long as a Table is there)
+ }
+ } else {
+ // this get rides of the extra <span>...</span> around our stuff
+ RenderContents (writer);
+ }
+ }
+
+ if (span) {
+ writer.RenderEndTag ();
+ }
+ }
+
+ protected virtual void SetItemType (ListItemType itemType)
+ {
+ type = itemType;
+ }
+
+#if NET_2_0
+ object IDataItemContainer.DataItem {
+ get { return item; }
+ }
+
+ int IDataItemContainer.DataItemIndex {
+ get { return index; }
+ }
+
+ int IDataItemContainer.DisplayIndex {
+ get { return index; }
+ }
+#endif
+ }
+}