如何验证和编辑单元格值

时间:2009-06-15 17:53:00

标签: c# winforms datagridview

我正在使用MS ACCESS作为后端的C#winforms应用程序。在datagridview中,我有一个列“startTime”。

我的要求是我要验证startime,如果需要,以编程方式编辑值并保存。

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

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);
}

2 个答案:

答案 0 :(得分:3)

老实说,我的建议是将单元格更改为预先填充的所有时间的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分钟,你可以改变内循环,如果你想让它以其他方式分解......

答案 1 :(得分:0)

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

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

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