Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用dateTimePicker在DataGridView中编辑日期_C#_Winforms_Datagridview_Datetimepicker - Fatal编程技术网

C# 使用dateTimePicker在DataGridView中编辑日期

C# 使用dateTimePicker在DataGridView中编辑日期,c#,winforms,datagridview,datetimepicker,C#,Winforms,Datagridview,Datetimepicker,我在winForms DataGridView中有一个DateTime列;当前,只能通过手动在“2010/09/02”中键入日期来编辑该字段,需要使用DateTimePicker(或等效工具)作为编辑器吗?DataGridViewDateTimePickerColumn不存在,因此您必须手动添加控件,如下所示 DateTimePicker dtp = new DateTimePicker(); Rectangle rectangle; public Form1()

我在winForms DataGridView中有一个DateTime列;当前,只能通过手动在“2010/09/02”中键入日期来编辑该字段,需要使用DateTimePicker(或等效工具)作为编辑器吗?

DataGridViewDateTimePickerColumn不存在,因此您必须手动添加控件,如下所示

    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;
    }
如果需要默认日期,可以通过RowsAdded事件处理

    private void dgv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
    {
        dgv.Rows[e.RowIndex].Cells[5].Value = DateTime.Now.ToShortDateString();
    }
您可能会发现这很有用……这是一个
DateTimePicker
列的示例。