class DataGridTimePickerColumn : DataGridColumnStyle 
     {
         private DateTimePicker myDateTimePicker = new DateTimePicker();
         // The isEditing field tracks whether or not the user is
         // editing data with the hosted control.
         private bool isEditing;        public DataGridTimePickerColumn() : base() 
         {
             myDateTimePicker.Visible = false;
         }        protected override void Abort(int rowNum)
         {
             isEditing = false;
             myDateTimePicker.ValueChanged -= 
                 new EventHandler(TimePickerValueChanged);
             Invalidate();
         }        protected override bool Commit
             (CurrencyManager dataSource, int rowNum) 
         {
             myDateTimePicker.Bounds = Rectangle.Empty;
          
             myDateTimePicker.ValueChanged -= 
                 new EventHandler(TimePickerValueChanged);            if (!isEditing)
                 return true;            isEditing = false;
            try 
             {
                 DateTime value = myDateTimePicker.Value;
                 SetColumnValueAtRow(dataSource, rowNum, value);
             } 
             catch (Exception) 
             {
                 Abort(rowNum);
                 return false;
             }            Invalidate();
             return true;
         }        protected override void Edit(
             CurrencyManager source, 
             int rowNum,
             Rectangle bounds, 
             bool readOnly,
             string instantText, 
             bool cellIsVisible) 
         {
             DateTime value = (DateTime) 
                 GetColumnValueAtRow(source, rowNum);
             if (cellIsVisible) 
             {
                 myDateTimePicker.Bounds = new Rectangle
                     (bounds.X + 2, bounds.Y + 2, 
                     bounds.Width - 4, bounds.Height - 4);
                 myDateTimePicker.Value = value;
                 myDateTimePicker.Visible = true;
                 myDateTimePicker.ValueChanged += 
                     new EventHandler(TimePickerValueChanged);
             } 
             else 
             {
                 myDateTimePicker.Value = value;
                 myDateTimePicker.Visible = false;
             }            if (myDateTimePicker.Visible)
                 DataGridTableStyle.DataGrid.Invalidate(bounds);
         }        protected override Size GetPreferredSize(
             Graphics g, 
             object value) 
         {
             return new Size(100, myDateTimePicker.PreferredHeight + 4);
         }        protected override int GetMinimumHeight() 
         {
             return myDateTimePicker.PreferredHeight + 4;
         }        protected override int GetPreferredHeight(Graphics g, 
             object value) 
         {
             return myDateTimePicker.PreferredHeight + 4;
         }        protected override void Paint(Graphics g, 
             Rectangle bounds, 
             CurrencyManager source, 
             int rowNum) 
         {
             Paint(g, bounds, source, rowNum, false);
         }
         protected override void Paint(
             Graphics g, 
             Rectangle bounds,
             CurrencyManager source, 
             int rowNum,
             bool alignToRight) 
         {
             Paint(
                 g,bounds, 
                 source, 
                 rowNum, 
                 , 
                 Brushes.Blue, 
                 alignToRight);
         }
         protected override void Paint(
             Graphics g, 
             Rectangle bounds,
             CurrencyManager source, 
             int rowNum,
             Brush backBrush, 
             Brush foreBrush,
             bool alignToRight) 
         {
             DateTime date = (DateTime) 
                 GetColumnValueAtRow(source, rowNum);
             Rectangle rect = bounds;
             g.FillRectangle(backBrush,rect);
             rect.Offset(0, 2);
             rect.Height -= 2;
             g.DrawString(date.ToString("d"), 
                 this.DataGridTableStyle.DataGrid.Font, 
                 foreBrush, rect);
         }        protected override void SetDataGridInColumn(DataGrid value) 
         {
             base.SetDataGridInColumn(value);
             if (myDateTimePicker.Parent != null) 
             {
                 myDateTimePicker.Parent.Controls.Remove 
                     (myDateTimePicker);
             }
             if (value != null) 
             {
                 value.Controls.Add(myDateTimePicker);
             }
         }        private void TimePickerValueChanged(object sender, EventArgs e) 
         {
             this.isEditing = true;
             base.ColumnStartedEditing(myDateTimePicker);
         }
     }Winform下的Datagrid的列风格(3)—DataGridTimePickerColumn
原创
             ©著作权归作者所有:来自51CTO博客作者biyusr216的原创作品,请联系作者获取转载授权,否则将追究法律责任        
            上一篇:Winform下的Datagrid的列风格(2)—DataGridTextBindColumn
下一篇:Winform下的Datagrid的列风格(4)—DataGridComboBoxTableViewColumn
 
            
        
                提问和评论都可以,用心的回复会被更多人看到
                评论
            
            
                    发布评论
                
            
            相关文章
        
        
- 
                    在WinForm的DataGrid中加入ComboBoxWinForm的DataGrid要显示ComboBox的效果必须要写一个继承自DataGridTextBoxColumn的类, 並在其中制作Com c# Datagrid ide System Windows
- 
                    DataGrid(WinForm)显示行号最简单的方法同样是重载OnPaint 方法,但是方法应该是比较巧妙的!而且不用担心标题是不是有显示,也不用去计算坐标,很方便的说! java javascript 前端 i++ ide
 
 
                    













 
                    

 
                 
                    