c# - 使用 dateTimePicker 在 DataGridView 中编辑日期

标签 c# winforms datagridview datetimepicker

我的 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();
}

关于c# - 使用 dateTimePicker 在 DataGridView 中编辑日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3630097/

相关文章:

c# - 如何让 .NET WinForms 组件使用 SET 时区而不是客户端时区?

c# - 如何将 DataTable 从一个类传递到另一个类

vb.net - 当单元格内容被截断时,将三个点(省略号)(...)更改为 VB.Net DataGridView 中的自定义字符

c# - 使属性在 DataGridView 中可见但在 PropertyGrid 中不可见?

java - 如何直接从 Windows CMD 向我的程序发送命令?

c# - 升级到 automapper 3 后缺少方法

c# - NetworkStream.DataAvailable 更新缓慢

c# - 重构这个 Lambda 表达式

winforms - 在 VC++ 中使用 'VS2010 Parallel Patterns Library'

c# - 如何从另一个 Windows 窗体访问一个 Windows 窗体控件?