Editable Date in DataGridView using dateTimePicker

拈花ヽ惹草 提交于 2019-12-22 05:38:31

问题


I have a DateTime column in my winForms DataGridView; currently the field can only be edited by typing the date in manually "2010/09/02", what would be needed to have a DateTimePicker (or equivalent) used as the editor instead?


回答1:


DataGridViewDateTimePickerColumn doesn't exist so you have to add control manually as below.

    DateTimePicker dtp = new DateTimePicker();
    Rectangle rectangle;

    public Form1()
    {
        InitializeComponent();

        dgv.Controls.Add(dtp);
        dtp.Visible = false;
        dtp.Format = DateTimePickerFormat.Custom;
        dtp.TextChanged += new EventHandler(dtp_TextChange);
    }

    private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        switch (e.ColumnIndex)
        {
            case 5: // Column index of needed dateTimePicker cell

                rectangle = dgv.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true); //  
                dtp.Size = new Size(rectangle.Width, rectangle.Height); //  
                dtp.Location = new Point(rectangle.X, rectangle.Y); //  
                dtp.Visible = true;

                break;
        }
    }

    private void dtp_TextChange(object sender, EventArgs e)
    {
        dgv.CurrentCell.Value = dtp.Text.ToString();
    }

    private void dgv_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
    {
        dtp.Visible = false;

    }

    private void dgv_Scroll(object sender, ScrollEventArgs e)
    {
        dtp.Visible = false;
    }

If you need a default date, you can handle it through the RowsAdded event.

    private void dgv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
    {
        dgv.Rows[e.RowIndex].Cells[5].Value = DateTime.Now.ToShortDateString();
    }


来源:https://stackoverflow.com/questions/3630097/editable-date-in-datagridview-using-datetimepicker

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!