http://community.csdn.net/Expert/topic/3434/3434227.xml?temp=.986416

解决方案 »

  1.   

    虽然已经结贴了,留段代码,给以后的搜索到的人参考吧微软自带的帮助里的,往datagrid单元格里面加一个timepicker控件。public 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(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);
    }
    }