507 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			507 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.ComponentModel;
 | |
| using System.Data;
 | |
| using System.Data.SqlTypes;
 | |
| using System.Drawing;
 | |
| using System.Windows.Forms;
 | |
| using DevComponents.DotNetBar.SuperGrid.Style;
 | |
| using DevComponents.Editors.DateTimeAdv;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.SuperGrid
 | |
| {
 | |
|     ///<summary>
 | |
|     /// GridTextBoxEditControl
 | |
|     ///</summary>
 | |
|     [ToolboxItem(false)]
 | |
|     public class GridDateTimeInputEditControl : DateTimeInput, IGridCellEditControl
 | |
|     {
 | |
|         #region Private variables
 | |
| 
 | |
|         private GridCell _Cell;
 | |
|         private EditorPanel _EditorPanel;
 | |
|         private Bitmap _EditorCellBitmap;
 | |
| 
 | |
|         private bool _ValueChanged;
 | |
|         private bool _SuspendUpdate;
 | |
| 
 | |
|         private DateTime _OrigValue;
 | |
| 
 | |
|         private StretchBehavior _StretchBehavior = StretchBehavior.None;
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         ///<summary>
 | |
|         /// GridDateTimeInputEditControl
 | |
|         ///</summary>
 | |
|         public GridDateTimeInputEditControl()
 | |
|         {
 | |
|             ShowUpDown = true;
 | |
|         }
 | |
| 
 | |
|         #region OnValueChanged
 | |
| 
 | |
|         /// <summary>
 | |
|         /// OnValueChanged
 | |
|         /// </summary>
 | |
|         /// <param name="e"></param>
 | |
|         protected override void OnValueChanged(EventArgs e)
 | |
|         {
 | |
|             if (_Cell != null && _SuspendUpdate == false)
 | |
|             {
 | |
|                 if (_OrigValue.Year != Value.Year || _OrigValue.Month != Value.Month ||
 | |
|                     _OrigValue.Day != Value.Day || _OrigValue.Hour != Value.Hour ||
 | |
|                     _OrigValue.Minute != Value.Minute || _OrigValue.Second != Value.Second)
 | |
|                 {
 | |
|                     _Cell.EditorValueChanged(this);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             base.OnValueChanged(e);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region GetValue
 | |
| 
 | |
|         /// <summary>
 | |
|         /// GetValue
 | |
|         /// </summary>
 | |
|         /// <param name="value"></param>
 | |
|         /// <returns></returns>
 | |
|         public virtual DateTime GetValue(object value)
 | |
|         {
 | |
|             if (value == null || value == Convert.DBNull ||
 | |
|                 (value is string && String.IsNullOrEmpty((string)value) == true))
 | |
|             {
 | |
|                 return (DateTime.MinValue);
 | |
|             }
 | |
| 
 | |
|             if (value is DateTime)
 | |
|                 return (Convert.ToDateTime(value));
 | |
| 
 | |
|             if (value is SqlDateTime)
 | |
|             {
 | |
|                 SqlDateTime sdt = (SqlDateTime)value;
 | |
| 
 | |
|                 if (sdt.IsNull == true)
 | |
|                     return (DateTime.MinValue);
 | |
| 
 | |
|                 return (sdt.Value);
 | |
|             }
 | |
| 
 | |
|             if (_Cell.IsValueExpression == true)
 | |
|                 value = _Cell.GetExpValue((string)value);
 | |
| 
 | |
|             if (value is string && CurrentCulture != null)
 | |
|             {
 | |
|                 DateTime d;
 | |
| 
 | |
|                 if (DateTime.TryParse(value.ToString(), GetActiveCulture().DateTimeFormat,
 | |
|                                       System.Globalization.DateTimeStyles.None, out d))
 | |
|                 {
 | |
|                     return (d);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return (Convert.ToDateTime(value));
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region IGridCellEditControl Members
 | |
| 
 | |
|         #region Public properties
 | |
| 
 | |
|         #region CanInterrupt
 | |
| 
 | |
|         /// <summary>
 | |
|         /// CanInterrupt
 | |
|         /// </summary>
 | |
|         public bool CanInterrupt
 | |
|         {
 | |
|             get { return (true); }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region CellEditMode
 | |
| 
 | |
|         /// <summary>
 | |
|         /// CellEditMode
 | |
|         /// </summary>
 | |
|         public CellEditMode CellEditMode
 | |
|         {
 | |
|             get { return (CellEditMode.Modal); }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region EditorCell
 | |
| 
 | |
|         /// <summary>
 | |
|         /// EditorCell
 | |
|         /// </summary>
 | |
|         public GridCell EditorCell
 | |
|         {
 | |
|             get { return (_Cell); }
 | |
|             set { _Cell = value; }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region EditorCellBitmap
 | |
| 
 | |
|         ///<summary>
 | |
|         /// EditorCellBitmap
 | |
|         ///</summary>
 | |
|         public Bitmap EditorCellBitmap
 | |
|         {
 | |
|             get { return (_EditorCellBitmap); }
 | |
| 
 | |
|             set
 | |
|             {
 | |
|                 if (_EditorCellBitmap != null)
 | |
|                     _EditorCellBitmap.Dispose();
 | |
| 
 | |
|                 _EditorCellBitmap = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region EditorPanel
 | |
| 
 | |
|         /// <summary>
 | |
|         /// EditorPanel
 | |
|         /// </summary>
 | |
|         public EditorPanel EditorPanel
 | |
|         {
 | |
|             get { return (_EditorPanel); }
 | |
|             set { _EditorPanel = value; }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region EditorFormattedValue
 | |
| 
 | |
|         ///<summary>
 | |
|         /// EditorFormattedValue
 | |
|         ///</summary>
 | |
|         public virtual string EditorFormattedValue
 | |
|         {
 | |
|             get 
 | |
|             {
 | |
|                 if (_Cell != null && _Cell.IsValueNull == true)
 | |
|                     return (_Cell.NullString);
 | |
| 
 | |
|                 return (Text);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region EditorValue
 | |
| 
 | |
|         /// <summary>
 | |
|         /// EditorValue
 | |
|         /// </summary>
 | |
|         public virtual object EditorValue
 | |
|         {
 | |
|             get { return (Value); }
 | |
|             set { Value = GetValue(value); }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region EditorValueChanged
 | |
| 
 | |
|         /// <summary>
 | |
|         /// EditorValueChanged
 | |
|         /// </summary>
 | |
|         public virtual bool EditorValueChanged
 | |
|         {
 | |
|             get { return (_ValueChanged); }
 | |
| 
 | |
|             set
 | |
|             {
 | |
|                 if (_ValueChanged != value)
 | |
|                 {
 | |
|                     _ValueChanged = value;
 | |
| 
 | |
|                     if (value == true)
 | |
|                         _Cell.SetEditorDirty(this);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region EditorValueType
 | |
| 
 | |
|         ///<summary>
 | |
|         /// EditorValueType
 | |
|         ///</summary>
 | |
|         public virtual Type EditorValueType
 | |
|         {
 | |
|             get { return (typeof(DateTime)); }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region StretchBehavior
 | |
| 
 | |
|         /// <summary>
 | |
|         /// StretchBehavior
 | |
|         /// </summary>
 | |
|         public virtual StretchBehavior StretchBehavior
 | |
|         {
 | |
|             get { return (_StretchBehavior); }
 | |
|             set { _StretchBehavior = value; }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region SuspendUpdate
 | |
| 
 | |
|         /// <summary>
 | |
|         /// SuspendUpdate
 | |
|         /// </summary>
 | |
|         public bool SuspendUpdate
 | |
|         {
 | |
|             get { return (_SuspendUpdate); }
 | |
|             set { _SuspendUpdate = value; }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region ValueChangeBehavior
 | |
| 
 | |
|         /// <summary>
 | |
|         /// ValueChangeBehavior
 | |
|         /// </summary>
 | |
|         public virtual ValueChangeBehavior ValueChangeBehavior
 | |
|         {
 | |
|             get { return (ValueChangeBehavior.InvalidateRender); }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region InitializeContext
 | |
| 
 | |
|         ///<summary>
 | |
|         /// InitializeContext
 | |
|         ///</summary>
 | |
|         ///<param name="cell"></param>
 | |
|         ///<param name="style"></param>
 | |
|         public virtual void InitializeContext(GridCell cell, CellVisualStyle style)
 | |
|         {
 | |
|             _Cell = cell;
 | |
| 
 | |
|             if (style != null)
 | |
|             {
 | |
|                 Enabled = (_Cell.ReadOnly == false);
 | |
|                 ForeColor = style.TextColor;
 | |
|                 Font = style.Font;
 | |
|             }
 | |
| 
 | |
|             _OrigValue = GetValue(cell.Value);
 | |
| 
 | |
|             Value = _OrigValue;
 | |
| 
 | |
|             _ValueChanged = false;
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region GetProposedSize
 | |
| 
 | |
|         ///<summary>
 | |
|         /// GetProposedSize
 | |
|         ///</summary>
 | |
|         ///<param name="g"></param>
 | |
|         ///<param name="cell"></param>
 | |
|         ///<param name="style"></param>
 | |
|         ///<param name="constraintSize"></param>
 | |
|         ///<returns></returns>
 | |
|         public virtual Size GetProposedSize(Graphics g,
 | |
|             GridCell cell, CellVisualStyle style, Size constraintSize)
 | |
|         {
 | |
|             Size size = GetPreferredSize(constraintSize);
 | |
| 
 | |
|             return (size);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Edit support
 | |
| 
 | |
|         #region BeginEdit
 | |
| 
 | |
|         /// <summary>
 | |
|         /// BeginEdit
 | |
|         /// </summary>
 | |
|         /// <param name="selectAll"></param>
 | |
|         /// <returns></returns>
 | |
|         public virtual bool BeginEdit(bool selectAll)
 | |
|         {
 | |
|             Show();
 | |
|             Focus();
 | |
| 
 | |
|             return (false);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region EndEdit
 | |
| 
 | |
|         /// <summary>
 | |
|         /// EndEdit
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public virtual bool EndEdit()
 | |
|         {
 | |
|             return (false);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region CancelEdit
 | |
| 
 | |
|         /// <summary>
 | |
|         /// CancelEdit
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public virtual bool CancelEdit()
 | |
|         {
 | |
|             return (false);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region CellRender
 | |
| 
 | |
|         /// <summary>
 | |
|         /// CellRender
 | |
|         /// </summary>
 | |
|         /// <param name="g"></param>
 | |
|         public virtual void CellRender(Graphics g)
 | |
|         {
 | |
|             _Cell.CellRender(this, g);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Keyboard support
 | |
| 
 | |
|         #region CellKeyDown
 | |
| 
 | |
|         ///<summary>
 | |
|         /// CellKeyDown
 | |
|         ///</summary>
 | |
|         public virtual void CellKeyDown(KeyEventArgs e)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region WantsInputKey
 | |
| 
 | |
|         /// <summary>
 | |
|         /// WantsInputKey
 | |
|         /// </summary>
 | |
|         /// <param name="key"></param>
 | |
|         /// <param name="gridWantsKey"></param>
 | |
|         /// <returns></returns>
 | |
|         public virtual bool WantsInputKey(Keys key, bool gridWantsKey)
 | |
|         {
 | |
|             switch (key & Keys.KeyCode)
 | |
|             {
 | |
|                 case Keys.Left:
 | |
|                 case Keys.Right:
 | |
|                 case Keys.Home:
 | |
|                 case Keys.End:
 | |
|                 case Keys.Up:
 | |
|                 case Keys.Down:
 | |
|                     return (true);
 | |
| 
 | |
|                 default:
 | |
|                     return (gridWantsKey == false);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Mouse support
 | |
| 
 | |
|         #region OnCellMouseMove
 | |
| 
 | |
|         ///<summary>
 | |
|         /// OnCellMouseMove
 | |
|         ///</summary>
 | |
|         ///<param name="e"></param>
 | |
|         public virtual void OnCellMouseMove(MouseEventArgs e)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region OnCellMouseEnter
 | |
| 
 | |
|         ///<summary>
 | |
|         /// OnCellMouseEnter
 | |
|         ///</summary>
 | |
|         ///<param name="e"></param>
 | |
|         public virtual void OnCellMouseEnter(EventArgs e)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region OnCellMouseLeave
 | |
| 
 | |
|         ///<summary>
 | |
|         /// OnCellMouseLeave
 | |
|         ///</summary>
 | |
|         ///<param name="e"></param>
 | |
|         public virtual void OnCellMouseLeave(EventArgs e)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region OnCellMouseUp
 | |
| 
 | |
|         ///<summary>
 | |
|         /// OnCellMouseUp
 | |
|         ///</summary>
 | |
|         ///<param name="e"></param>
 | |
|         public virtual void OnCellMouseUp(MouseEventArgs e)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region OnCellMouseDown
 | |
| 
 | |
|         ///<summary>
 | |
|         /// OnCellMouseDown
 | |
|         ///</summary>
 | |
|         ///<param name="e"></param>
 | |
|         public virtual void OnCellMouseDown(MouseEventArgs e)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| }
 |