对了,是在WinForm中,不是ASP.NET中

解决方案 »

  1.   

    datagrid有个列样式DataGridTextBoxColumn,用这个定义一个列:
    DataTimePicker dtp = new DataTimePicker(); 
    DataGridTextBoxColumn dgtb = new DataGridTextBoxColumn();
    dgtb.TextBox.Controls.Add(dtp);
    dtp.BringToFront();
      

  2.   

    using System;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Data;namespace MyControls
    {
    /// <summary>
    /// DataGridDatePickColumn 的摘要说明。
    /// </summary>
    public class DataGridDatePickColumn : DataGridTextBoxColumn
    {
    public DateTimePicker ColunmDatePicker;
    private bool m_IsEditing;
    private int m_RowNum;
    public static int m_RowCount;
    private CurrencyManager m_Source; /// <summary>
    /// 构造器
    /// </summary>
    public DataGridDatePickColumn()
    {
    m_Source = null;
    m_RowCount = -1;
    m_IsEditing = false; ColunmDatePicker = new DateTimePicker();
    ColunmDatePicker.Leave +=new EventHandler(ColunmDatePicker_Leave);
    ColunmDatePicker.Enter +=new EventHandler(ColunmDatePicker_Enter);
    }
    /// <summary>
    /// 失去焦点时显示为TextBox
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void ColunmDatePicker_Leave(object sender, EventArgs e)
    {
    if(m_IsEditing)
    {
    SetColumnValueAtRow(m_Source,m_RowNum,ColunmDatePicker.Text);
    m_IsEditing = false;
    Invalidate();
    }
    ColunmDatePicker.Hide();
    this.DataGridTableStyle.DataGrid.Scroll -= new EventHandler(DataGrid_Scroll);
    }
    /// <summary>
    /// 获得焦点时显示为DatePicker
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void ColunmDatePicker_Enter(object sender, EventArgs e)
    {
    m_IsEditing = true;
    }
    protected  override void Edit(CurrencyManager source, int rowNum, Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
    {
    base.Edit (source, rowNum, bounds, readOnly, instantText, cellIsVisible); m_RowNum = rowNum;
    m_Source = source;

    ColunmDatePicker.Parent = this.TextBox.Parent;
    ColunmDatePicker.Location = this.TextBox.Location;
    ColunmDatePicker.Size = new Size(this.TextBox.Width,this.TextBox.Height);

    //编辑DatePicker时,下拉列表显示当前记录的文本
    ColunmDatePicker.Text= this.TextBox.Text;
    this.TextBox.Visible = false;
    ColunmDatePicker.Visible = true;

    //拉动DataGrid滚动条时,触发事件
    this.DataGridTableStyle.DataGrid.Scroll +=new EventHandler(DataGrid_Scroll);

    ColunmDatePicker.BringToFront();
    ColunmDatePicker.Focus();
    }
    private void DataGrid_Scroll(object sender, EventArgs e)
    {
    //拉动DataGrid滚动条时,DatePicker隐藏
    if(ColunmDatePicker.Visible)
    {
    ColunmDatePicker.Hide();
    }
    }
    }//end class
    }//end namespace
      

  3.   

    上面的是类,用的时候这样
    DataGridTableStyle myTableStyle = new DataGridTableStyle();
    myTableStyle.MappingName = YOURtable.TableName; //创建自制的DataGridDatePickerColumn对象
    DataGridDatePickColumn DateCol = new DataGridDatePickColumn();
    DateCol.MappingName = YOURtable.Columns["YOURcloumn"].ColumnName;
    DateCol.HeaderText = "日期";
    DateCol.Width = 120;
    DateCol.Alignment = HorizontalAlignment.Right;
    myTableStyle.GridColumnStyles.Add(DateCol);
    dataGrid1.TableStyles.Clear();
    dataGrid1.TableStyles.Add(myTableStyle);
      

  4.   

    恰好前几天需要用来着,就参照着ComboBox in dataGrid 的原理弄了一个,呵呵,与大家分享一下