www.pudn.com > Tustena_CRM_OS_3.0.2_Stable.zip > DigiGrid.cs


/// TUSTENA PUBLIC LICENSE v1.0 
///  
/// Portions Copyright (c) 2003-2005 Digita S.r.l. All Rights Reserved. 
/// 
/// Tustena CRM is a trademark of: 
/// Digita S.r.l. 
/// Viale Enrico Fermi 14/z 
/// 31011 Asolo (Italy) 
/// Tel. +39-0423-951251 
/// Mail. info@digita.it 
/// 
/// This file contains Original Code and/or Modifications of Original Code 
/// as defined in and that are subject to the Tustena Public Source License 
/// Version 1.0 (the 'License'). You may not use this file except in 
/// compliance with the License. Please obtain a copy of the License at 
/// http://www.tustena.com/TPL/ and read it before using this 
// file. 
/// 
/// The Original Code and all software distributed under the License are 
/// distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
/// EXPRESS OR IMPLIED, AND DIGITA S.R.L. HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
/// INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
/// FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
/// Please see the License for the specific language governing rights and 
/// limitations under the License. 
/// 
/// YOU MAY NOT REMOVE OR ALTER THIS COPYRIGHT NOTICE! 
///  
 
using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Web.UI.WebControls; 
 
namespace Digita.Tustena 
{ 
	public delegate void ChangedEventHandler(object sender, EventArgs e); 
 
	[ 
		DefaultProperty("DigiGrid") 
	] 
 
 
 
	public class DigiGrid : DataGrid 
	{ 
		private bool shouldRebind = false; 
		private bool editingMode = false; 
		private int[] FieldTypes; 
		private string[] FieldNames; 
		private int fieldCount; 
		private DataTable dt = null; 
 
 
		public Hashtable DropFields 
		{ 
			get { return dropFields; } 
			set { dropFields = value; } 
		} 
 
		private Hashtable dropFields; 
 
		public string HiddenColumns 
		{ 
			get { return _HiddenColumns; } 
			set { _HiddenColumns = value; } 
		} 
 
		private string _HiddenColumns = string.Empty; 
 
 
		public event ChangedEventHandler Changed; 
 
		protected virtual void OnChanged(EventArgs e) 
		{ 
			if (Changed != null) 
				Changed(this, e); 
		} 
 
 
		public DataSet DataSetSource 
		{ 
			get { return (DataSet) ViewState["TableSource"]; } 
			set { ViewState["TableSource"] = value; } 
		} 
 
 
 
 
		[ 
			Bindable(true), 
				Browsable(true), 
				Category("Appearance"), 
				Description("Name of CSS class to apply to textboxes in edit mode.") 
		] 
		public string EditTextBoxCssClass 
		{ 
			get 
			{ 
				string s = (string) ViewState["EditTextBoxCssClass"]; 
				if (s == null) 
					return String.Empty; 
				return s; 
			} 
			set { ViewState["EditTextBoxCssClass"] = value; } 
		} 
 
 
 
		protected override void OnInit(EventArgs e) 
		{ 
			if (Page != null) 
			{ 
 
				EditCommandColumn c0 = new EditCommandColumn(); 
				c0.EditText = "edit this item"; 
				c0.CancelText = "cancel"; 
				c0.UpdateText = "save changes"; 
				c0.ItemStyle.HorizontalAlign = HorizontalAlign.Center; 
				c0.HeaderStyle.Width = new Unit("35px"); 
				this.Columns.Add(c0); 
 
				ButtonColumn c1 = new ButtonColumn(); 
				c1.CommandName = "Delete"; 
				c1.Text = "delete this item"; 
				c1.ItemStyle.HorizontalAlign = HorizontalAlign.Center; 
				c1.HeaderStyle.Width = new Unit("35px"); 
				this.Columns.Add(c1); 
 
				this.ShowFooter = true; 
				this.ItemStyle.VerticalAlign = VerticalAlign.Top; 
			} 
		} 
 
		protected override void OnLoad(EventArgs e) 
		{ 
			if (Page != null) 
			{ 
				dt = DataSetSource.Tables[0]; 
				fieldCount = 0; 
				fieldCount = dt.Columns.Count; 
				string[] tempName = new string[fieldCount]; 
				int[] tempType = new int[fieldCount]; 
				FieldTypes = tempType; 
				FieldNames = tempName; 
 
				bool accessType = false; 
				for (int i = 0; i < fieldCount; i++) 
				{ 
					string fldType = Convert.ToString(dt.Columns[i].DataType); 
					switch (fldType) 
					{ 
						case "System.String": 
							FieldTypes[i] = 1; 
							break; 
						case "System.Byte": 
							FieldTypes[i] = 2; 
							break; 
						case "System.Decimal": 
							FieldTypes[i] = 2; 
							break; 
						case "System.Double": 
							FieldTypes[i] = 2; 
							break; 
						case "System.Int16": 
							FieldTypes[i] = 2; 
							break; 
						case "System.Int32": 
							FieldTypes[i] = 2; 
							break; 
						case "System.Int64": 
							FieldTypes[i] = 2; 
							break; 
						case "System.Single": 
							FieldTypes[i] = 2; 
							break; 
						case "System.DateTime": 
							if (accessType) 
							{ 
								FieldTypes[i] = 5; 
							} 
							else 
							{ 
								FieldTypes[i] = 3; 
							} 
							break; 
						case "System.Boolean": 
							FieldTypes[i] = 4; 
							break; 
						default: 
							FieldTypes[i] = 0; 
							break; 
					} 
					FieldNames[i] = Convert.ToString(dt.Columns[i].ColumnName); 
				} 
			} 
 
			if (!Page.IsPostBack) 
			{ 
				shouldRebind = true; 
			} 
 
		} 
 
		protected override void OnPageIndexChanged(DataGridPageChangedEventArgs e) 
		{ 
			if (!editingMode) 
			{ 
				this.CurrentPageIndex = e.NewPageIndex; 
				shouldRebind = true; 
			} 
 
		} 
 
		protected override void OnEditCommand(DataGridCommandEventArgs e) 
		{ 
			if (!editingMode) 
			{ 
				this.EditItemIndex = e.Item.ItemIndex; 
				shouldRebind = true; 
			} 
		} 
 
		protected override void OnCancelCommand(DataGridCommandEventArgs e) 
		{ 
			this.EditItemIndex = -1; 
			shouldRebind = true; 
		} 
 
		protected override void OnDeleteCommand(DataGridCommandEventArgs e) 
		{ 
			if (!editingMode) 
			{ 
				DataSetSource.Tables[0].Rows[e.Item.ItemIndex].Delete(); 
				this.EditItemIndex = -1; 
				OnChanged(EventArgs.Empty); 
				shouldRebind = true; 
			} 
		} 
 
		protected override void OnUpdateCommand(DataGridCommandEventArgs e) 
		{ 
			this.EditItemIndex = -1; 
			int fieldCountG = e.Item.Cells.Count - 2; 
			for (int i = 0; i < fieldCountG; i++) 
			{ 
				if (FieldNames[i].ToString() != this.DataKeyField) 
				{ 
					DataSetSource.Tables[0].Rows[e.Item.ItemIndex][FieldNames[i].ToString()] = ((TextBox) e.Item.Cells[i + 2].Controls[0]).Text; 
				} 
			} 
			OnChanged(EventArgs.Empty); 
			shouldRebind = true; 
		} 
 
		internal int fileColumn = -1; 
		internal string ddlFieldName = String.Empty; 
 
		protected override void OnItemDataBound(DataGridItemEventArgs e) 
		{ 
			if (e.Item.ItemType == ListItemType.Header) 
			{ 
				int icount=0; 
				foreach (TableCell c in e.Item.Controls) 
				{ 
					if(DropFields.ContainsKey(c.Text)) 
					{ 
						fileColumn=icount; 
						ddlFieldName=c.Text; 
					} 
 
 
					icount++; 
				} 
			} 
			else if (e.Item.ItemType == ListItemType.EditItem) 
			{ 
				int icount=0; 
				foreach (TableCell c in e.Item.Controls) 
				{ 
					if (c.Controls[0].GetType() == typeof (TextBox)) 
					{ 
						TextBox t = (TextBox) c.Controls[0]; 
						if(icount==fileColumn+1) 
						{ 
							t.Style["display"] = "none"; 
							DropDownList ifc = new DropDownList(); 
							string[] dropvalue = DropFields[ddlFieldName].ToString().Split(','); 
							for(int i=0;i 1) 
						{ 
							t.TextMode = TextBoxMode.MultiLine; 
							t.Rows = rows + 3; 
 
						} 
					} 
					icount++; 
				} 
			} 
		} 
 
 
		protected override void OnItemCreated(DataGridItemEventArgs e) 
		{ 
			if (e.Item.ItemType == ListItemType.Header) 
			{ 
				e.Item.Cells.RemoveAt(0); 
				e.Item.Cells.RemoveAt(0); 
				TableCell c = new TableCell(); 
				c.ColumnSpan = 2; 
				c.Text = "" + DataSetSource.Tables[0].TableName.ToUpper() + ""; 
				e.Item.Cells.AddAt(0, c); 
 
			} 
 
			if (e.Item.ItemType == ListItemType.Footer) 
			{ 
				e.Item.Cells.RemoveAt(0); 
				e.Item.Cells.RemoveAt(0); 
				TableCell c = new TableCell(); 
				c.ColumnSpan = 2; 
				LinkButton l = new LinkButton(); 
				l.Click += new EventHandler(AddItem); 
				l.Text = "Add New"; 
				l.CssClass = "CommandButton"; 
				c.Controls.Add(l); 
				e.Item.Cells.AddAt(0, c); 
			} 
 
 
		} 
 
		protected override void OnPreRender(EventArgs e) 
		{ 
			if (shouldRebind) 
			{ 
				BindData(); 
			} 
		} 
 
		protected override void OnItemCommand(DataGridCommandEventArgs e) 
		{ 
			CheckEditing(e.CommandName); 
		} 
 
 
 
		[ 
			Bindable(false), 
				Browsable(false) 
		] 
		public override object DataSource 
		{ 
			get { return base.DataSource; } 
			set { base.DataSource = value; } 
		} 
 
 
		private void CheckEditing(string commandName) 
		{ 
			if (this.EditItemIndex != -1) 
			{ 
				if (!commandName.Equals("Cancel") && !commandName.Equals("Update")) 
				{ 
					editingMode = true; 
				} 
			} 
		} 
 
		public void BindData() 
		{ 
			this.DataSource = DataSetSource; 
			this.DataBind(); 
		} 
 
		private void AddItem(Object src, EventArgs e) 
		{ 
			CheckEditing(""); 
			if (!editingMode) 
			{ 
				DataRow dr = DataSetSource.Tables[0].NewRow(); 
				DataSetSource.Tables[0].Rows.Add(dr); 
			} 
 
 
			this.CurrentPageIndex = this.PageCount - 1; 
			BindData(); 
			this.EditItemIndex = this.Items.Count - 1; 
			BindData(); 
		} 
	} 
 
 
}