如何在没有日期时间选择器的情况下在datagridview中编辑日期时间值?

问题描述 投票:0回答:2

我在 datagridview 中有一个日期时间列,并以自定义格式显示它:dd/MM/yyyy HH:mm:ss

我想编辑日期时间值,因此我尝试添加日期时间选择器控件,如果正确选择值,它就可以工作。 (但我觉得效率不高)。

有时会接受无效值,并且 dgv_dataerror 事件会无限发生,而不允许我更改该值。

例如,当我使用键盘箭头键不断从一个单元格移动到另一个单元格时,如果我意外地按空格键,单元格值会变为空,并且数据错误事件会无限发生。

是否有任何替代解决方案可以在没有用于更改日期时间值的日期时间选择器控件的情况下实现此目的?

c# winforms datetime datagridview datetimepicker
2个回答
1
投票

我在这里找到了答案: https://msdn.microsoft.com/en-us/library/7tas5c80%28v=vs.110%29.aspx

它使用日期时间选择器创建一种 DataGridViewColumn 类型...

编辑:如何动态添加此自定义列:

        dgvMain.DataSource = bulkImportTable;
        CalendarColumn col = new CalendarColumn();
        col.Name = "DeployDate";
        dgvMain.Columns.Remove("DeployDate");
        dgvMain.Columns.Add(col);

        col.DataPropertyName = col.Name;
        foreach (DataGridViewRow row in dgvMain.Rows)
        {
            row.Cells[dgvMain.Columns.Count - 1].Value = DateTime.Now.ToShortDateString();
        }

在此代码中,我使用 ToShortDateString(),但您可以在此处使用您自己的自定义方法。请务必在自定义的 CalendarColumn 中更改此自定义代码... 使用 ShortDateString 和 LongDateString 的优点是,当客户端具有不同的区域设置时,它会动态变化...


0
投票

考虑到 Visual Studio 2005 的限制,使用 MaskedTextBox 为 DataGridView 创建自定义单元格类型可能涉及更复杂的步骤。如果您使用 Visual Studio 2005 并遇到此问题,您可能会考虑使用不同的方法,例如在输入后验证输入或使用单独的表单以所需的格式输入时间。

如果您愿意使用较新版本的 Visual Studio(例如 Visual Studio 2015 或更高版本),您可以利用更高级的 DataGridView 功能和第三方库,这些库为屏蔽输入提供内置支持。 班级计划 { static bool ValidateTimeFormat(字符串输入) { // 匹配时间格式的正则表达式模式 (hh:mm:ss) 字符串模式 = @"^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] $";

    // Create a Regex object with the pattern
    Regex regex = new Regex(pattern);

    // Use the IsMatch method to check if the input matches the pattern
    return regex.IsMatch(input);
}

static void Main()
{
    // Example usage
    string timeInput = "12:34:56";
    if (ValidateTimeFormat(timeInput))
    {
        Console.WriteLine("The input represents a valid time format.");
    }
    else
    {
        Console.WriteLine("The input does not represent a valid time format.");
    }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.