Как проверить и отредактировать значение ячейки - PullRequest
1 голос
/ 15 июня 2009

Я работаю над C # winforms приложением с MS ACCESS в качестве бэкэнда. В таблице данных у меня есть столбец "startTime".

Мое требование: я хочу проверить время запуска и, если необходимо, отредактировать значение программно и сохранить его.

Например, если пользователь вводит «8:00 AM» вместо «8:00 AM», моя программа не должна выдавать ошибку, говорящую «недопустимый тип данных» (в базе данных «StartTime» - поле типа datetime). Скорее моя программа должна измениться с 8:00 до 8:00 и отправить 8:00 на сервер. ниже вставлен код. Любые предложения, пожалуйста.

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 ]

3 голосов
/ 15 июня 2009

Честно говоря, я бы предложил изменить ячейку на ячейку 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-минутные приращения, вы можете просто изменить внутренний цикл, если хотите, чтобы он был разорван каким-либо другим способом ...

0 голосов
/ 15 июня 2009

Вам нужно будет определить, является ли запись действительной, а затем, если она не создает новую функцию или способ изменить запись на действительное время / дату. Видя, как пользователи могут вводить некоторые сумасшедшие вещи, которые могут быть трудными.

Если вы сделаете это, вы можете легко установить значение этой ячейки для действительной записи:

dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = YourNewDateValue;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...