zoukankan      html  css  js  c++  java
  • Winform下的Datagrid的列风格(3)—DataGridTimePickerColumn(转)

    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.Red, 
                    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(
    02);
                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);
            }

        }
  • 相关阅读:
    JSON 数字排序 多字段排序
    hdu-4747-Mex
    Android SDK更新缓慢或无法更新的解决方法
    UVA 11806
    SDL显示内存中的图像
    Cocos2d-x 2.1.5 简单动画
    codeforce343A
    android 控件的移动
    Erlang千万级用户游戏框架(Openpoker)源码文件分析清单
    八大排序c++可运行精简版,一目了然
  • 原文地址:https://www.cnblogs.com/yitian/p/1289999.html
Copyright © 2011-2022 走看看