【问题标题】:How to validate and edit a cell value如何验证和编辑单元格值
【发布时间】:2009-06-15 17:52:59
【问题描述】:

我正在开发以 MS ACCESS 作为后端的 C# winforms 应用程序。在 datagridview 我有一列“startTime”。

我的要求是我想验证开始时间,如果需要,以编程方式编辑值并保存它。

例如,如果用户输入“8.00 AM”而不是“8:00 AM”,我的程序不应抛出“无效数据类型”错误(在数据库中“StartTime”是日期时间类型的字段)。相反,我的程序应该将 8.00 AM 更改为 8:00 AM,并将 8:00 AM 发送到后端。 下面粘贴的是代码。任何建议请。

private void dgvSession_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        //** Validation for StartTime
        if (e.ColumnIndex == this.dgvSession.Columns["StartTime"].Index)
        {

        string time = e.FormattedValue.ToString().Trim();
        strtDt = e.FormattedValue.ToString().Trim();
        if (!ValidateTime(time))
        {
            //MessageBox.Show("Entered time is not in a correct format.);

            e.Cancel = true;
            return;
        }
    }
}

public bool ValidateTime(string thetime)
{
    Regex checktime = new Regex(@"(^([0-9]|[0-1][0-9]|[2][0-3])[.:]([0-5][0-9])(\s{0,1})(AM|PM|am|pm|aM|Am|pM|Pm{2,2})$)|(^([0-9]|[1][0-9]|[2][0-3])(\s{0,1})(AM|PM|am|pm|aM|Am|pM|Pm{2,2})$)");

    return checktime.IsMatch(thetime);
}

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    老实说,我的建议是将单元格更改为预先填充所有时间的 ComboBox 单元格。限制用户可以输入的内容总是更容易,而不是允许他们输入任何内容,然后尝试在以后做出正面或反面。

    粗略代码:

            DataGridViewComboBoxColumn timeColumn = new DataGridViewComboBoxColumn();
            timeColumn.DisplayMember = "TimeOfDay";
            DateTime startTime = DateTime.Today;
            for (int i = 0; i <= 23; i++)
            {
                for (int j = 0; j <= 60; j += 15)
                {
                    timeColumn.Items.Add(startTime.AddHours(i).AddMinutes(j));
                }
            }
    
            this.dataGridView1.Columns.Add(timeColumn);
    

    这会以 15 分钟为增量,如果您想以其他方式分解内部循环,您可以更改内部循环...

    【讨论】:

      【解决方案2】:

      您需要确定条目是否有效,然后确定它是否没有创建新函数或将条目更改为有效日期时间的方法。看到用户可以输入一些可能很难的疯狂东西。

      如果您这样做,您可以轻松地将该单元格的值设置为有效条目:

      dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = YourNewDateValue;
      

      【讨论】:

        猜你喜欢
        • 2014-03-08
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 2011-02-08
        • 2020-12-06
        • 2013-12-14
        • 1970-01-01
        • 2012-01-18
        相关资源
        最近更新 更多