Răsfoiți Sursa

2002-10-28 Gaurav Vaish <[email protected]>

* BoundColumn.cs        - InitializeCell(TableCell, int, ListItemType)
                                              : Implemented.
                        - All Properties      : Now make use of ViewState.

svn path=/trunk/mcs/; revision=8620
Gaurav Vaish 23 ani în urmă
părinte
comite
72b85ba496

+ 179 - 109
mcs/class/System.Web/System.Web.UI.WebControls/BoundColumn.cs

@@ -1,109 +1,179 @@
-/**
- * Namespace: System.Web.UI.WebControls
- * Class:     BoundColumn
- * 
- * Author:  Gaurav Vaish
- * Maintainer: [email protected]
- * Contact: <[email protected]>, <[email protected]>
- * Implementation: yes
- * Status:  60%
- * 
- * (C) Gaurav Vaish (2001)
- */
-
-using System;
-using System.ComponentModel;
-using System.Web;
-using System.Web.UI;
-
-namespace System.Web.UI.WebControls
-{
-	public class BoundColumn : DataGridColumn
-	{
-		public static readonly string thisExpr = "!";
-		
-		private string dataField;
-		private string dataFormatString;
-		private bool readOnly;
-		
-		private PropertyDescriptor desc;
-
-		public BoundColumn(): base()
-		{
-			//TODO: The start work
-			Initialize();
-		}
-		
-		public override void Initialize()
-		{
-			base.Initialize();
-			dataField        = String.Empty;
-			dataFormatString = String.Empty;
-			readOnly         = false;
-			desc             = null;
-		}
-
-		[MonoTODO]
-		public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType)
-		{
-			//TODO: What to do?
-			InitializeCell(cell, columnIndex, itemType);
-//			switch(itemType)
-//			{
-//				case 
-//			}
-			throw new NotImplementedException();
-		}
-		
-		public virtual string DataField
-		{
-			get
-			{
-				return dataField;
-			}
-			set
-			{
-				dataField = value;
-			}
-		}
-		
-		public virtual string DataFormatString
-		{
-			get
-			{
-				return dataFormatString;
-			}
-			set
-			{
-				dataFormatString = value;
-			}
-		}
-		
-		public virtual bool ReadOnly
-		{
-			get
-			{
-				return readOnly;
-			}
-			set
-			{
-				readOnly = value;
-			}
-		}
-		
-		[MonoTODO]
-		protected virtual string FormatDataValue(Object dataValue)
-		{
-			// TODO: How to extract the value from the object?
-			// TODO: Then format the value. Here's a possible solution
-			if(dataFormatString == null || dataFormatString.Equals(String.Empty))
-				return dataValue.ToString();
-			if(dataValue is DateTime)
-				return ((DateTime)dataValue).ToString(dataFormatString);
-			throw new NotImplementedException();
-			// and so on for int, String, double..
-			// something's wrong here. there must be some shorter method!
-			//string val = dataValue.toString(dataFormatString);
-		}
-	}
-}
+/**
+ * Namespace: System.Web.UI.WebControls
+ * Class:     BoundColumn
+ *
+ * Author:  Gaurav Vaish
+ * Maintainer: [email protected]
+ * Contact: <[email protected]>, <[email protected]>
+ * Implementation: yes
+ * Status:  60%
+ *
+ * (C) Gaurav Vaish (2001)
+ */
+
+using System;
+using System.ComponentModel;
+using System.Web;
+using System.Web.UI;
+
+namespace System.Web.UI.WebControls
+{
+	public class BoundColumn : DataGridColumn
+	{
+		public static readonly string thisExpr = "!";
+
+		private bool boundFieldDesciptionValid;
+		private string boundField;
+		private string formatting;
+		
+		private PropertyDescriptor desc;
+
+		public BoundColumn(): base()
+		{
+		}
+
+		public override void Initialize()
+		{
+			base.Initialize();
+
+			desc       = null;
+			boundField = DataField;
+			formatting = DataFormatString;
+			boundFieldDesciptionValid = false;
+		}
+
+		public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType)
+		{
+			base.InitializeCell(cell, columnIndex, itemType);
+
+			Control bindCtrl = null;
+			Control toAdd    = null;
+			switch(itemType)
+			{
+				case ListItemType.Item : goto case ListItemType.SelectedItem;
+				case ListItemType.AlternatingItem
+				                       : goto case ListItemType.SelectedItem;
+				case ListItemType.SelectedItem
+				                       : if(DataField.Length != 0)
+				                         	bindCtrl = cell;
+				                         break;
+				case ListItemType.EditItem
+					                   : if(!ReadOnly)
+					                     {
+					                     	TextBox box = new TextBox();
+					                     	toAdd = box;
+					                     	if(DataField.Length != 0)
+					                     		bindCtrl = box;
+					                     }
+					                     break;
+			}
+			if(toAdd != null)
+				cell.Controls.Add(toAdd);
+			if(bindCtrl != null)
+				bindCtrl.DataBinding += new EventHandler(OnDataBindColumn);
+			//throw new NotImplementedException();
+		}
+
+		private void OnDataBindColumn(object sender, EventArgs e)
+		{
+			Control senderCtrl = (Control)sender;
+			DataGridItem item  = (DataGridItem)senderCtrl.NamingContainer;
+			object       data  = item.DataItem;
+
+			if(!boundFieldDesciptionValid)
+			{
+				if(boundField != BoundColumn.thisExpr)
+				{
+					desc = TypeDescriptor.GetProperties(data).Find(boundField, true);
+					if(desc == null && !DesignMode)
+					{
+						throw new HttpException(
+						          HttpRuntime.FormatResourceString("File_Not_Found",
+						                                           boundField));
+					}
+					boundFieldDesciptionValid = true;
+				}
+			}
+			object value = data;
+			string val = String.Empty;
+			if(desc == null && DesignMode)
+			{
+				throw new NotImplementedException();
+			} else
+			{
+				if(desc != null)
+					value = desc.GetValue(data);
+				val = FormatDataValue(value);
+			}
+			if(senderCtrl is TableCell)
+			{
+				if(val.Length == 0)
+					val = "&nbsp;";
+				((TableCell)senderCtrl).Text = val;
+			} else
+			{
+				((TextBox)senderCtrl).Text = val;
+			}
+		}
+
+		public virtual string DataField
+		{
+			get
+			{
+				object o = ViewState["DataField"];
+				if(o != null)
+					return (string)o;
+				return String.Empty;
+			}
+			set
+			{
+				ViewState["DataField"] = value;
+				OnColumnChanged();
+			}
+		}
+
+		public virtual string DataFormatString
+		{
+			get
+			{
+				object o = ViewState["DataFormatString"];
+				if(o != null)
+					return (string)o;
+				return String.Empty;
+			}
+			set
+			{
+				ViewState["DataFormatString"] = value;
+				OnColumnChanged();
+			}
+		}
+
+		public virtual bool ReadOnly
+		{
+			get
+			{
+				object o = ViewState["ReadOnly"];
+				if(o != null)
+					return (bool)o;
+				return false;
+			}
+			set
+			{
+				ViewState["ReadOnly"] = value;
+			}
+		}
+
+		protected virtual string FormatDataValue(Object dataValue)
+		{
+			string retVal = String.Empty;
+			if(dataValue != null)
+			{
+				if(formatting.Length == 0)
+					retVal = dataValue.ToString();
+				else
+					retVal = String.Format(formatting, dataValue);
+			}
+			return retVal;
+		}
+	}
+}

+ 6 - 0
mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog

@@ -1,4 +1,10 @@
 
+2002-10-28      Gaurav Vaish <[email protected]>
+
+	* BoundColumn.cs        - InitializeCell(TableCell, int, ListItemType)
+	                                              : Implemented.
+	                        - All Properties      : Now make use of ViewState.
+
 2002-10-28      Gaurav Vaish <[email protected]>
 
 	* BaseValidator.cs      - Uncomment NotImplementedException.