Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
tumanovalex
3 / 3 / 1
Регистрация: 09.07.2009
Сообщений: 287
1

Контроль ввода данных в DataGridView

11.05.2013, 15:45. Просмотров 1358. Ответов 3
Метки нет (Все метки)

Хотелось бы сделать следующее:
1. Запретить непосредственный ввод данных в поле даты и разрешить ввод данных только из календаря
2. Проверить значении, вводимое в числовое поле, и заменить системное сообщение об ошибке своим сообщением.
Подскажите, пожалуйста, как это сделать. Я пытался по пункту 2 сделать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void dgv1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
  if (e.ColumnIndex == 3 && dgv1.CurrentCell.Value.ToString() != "")
  {
    int num;
    Boolean bl = int.TryParse(dgv1.CurrentCell.Value.ToString(), out num);
    if (bl == false)
    {
      MessageBox.Show("Введенные данные не соответствуют формату числа!", "Программа для изучения C#", MessageBoxButtons.OK);
    }
  }
}
но получается ерунда: если вводить в числовое поле числа - то все нормально работает, а если вводить строки, то появляется системное сообщение.
Если e.ColumnIndex == 3 && dgv1.CurrentCell.Value.ToString() != "" заменить на e.ColumnIndex == 3, то при первом же щелчке на поле появляется мое сообщение об ошибке, поскольку значение ячейки пустое. Проект прикрепляю
0
Вложения
Тип файла: zip AdoNetControlEnter.zip (31.1 Кб, 10 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2013, 15:45
Ответы с готовыми решениями:

Контроль ввода-вывода потока
Есть функция F которая работает в отдельном потоке и читает данные из stream. Когда стрим...

Ограничения ввода в DataGridView
Необходимо, чтобы при редактировании (или вводе) значений в ячейках DataGridView, имеющих...

Контроль изменения данных в БД
Добрый день. Заранее извиняюсь, если мои вопросы вызовут негодование у кого ни будь... Но все...

DatagridView-обработка ошибки ввода
Добрый день! Возникло два вопроса: 1) Данные вносятся через DatagridView (Связка...

Контроль изменений записей в базе данных
Добрый день. Тема не столько по программированию, сколько по логике организации базы данных. Есть...

3
AlexAsche
78 / 78 / 15
Регистрация: 27.01.2013
Сообщений: 323
11.05.2013, 17:56 2
По 1 можно модифицировать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private void dgv1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 2 && dgv1.CurrentCell.Value.ToString() == "")
            {
                Rectangle curcell = dgv1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
                Point p = new Point(curcell.Right, curcell.Bottom);
                mc.Location = p;
                mc.Visible = true;
                mc.Show();
                dgv1.Enabled = false;//пока в календаре ничего не выбрано доступа нет
            }
            else
            {
                mc.Visible = false;
            }
        }
 
        private void mc_DateSelected(object sender, DateRangeEventArgs e)
        {
            dgv1.CurrentCell.Value = e.Start;
            mc.Visible = false;
            dgv1.Enabled = true; 
 
        }
А по 2:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void dgv1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            int num;
            if (e.ColumnIndex == 3 && !int.TryParse(e.FormattedValue.ToString(),
                out num))
            {
                e.Cancel = true;
                dgv1.Rows[e.RowIndex].ErrorText = "Введенные данные не соответствуют формату числа";
                MessageBox.Show("Введенные данные не соответствуют формату числа!", "Программа для изучения C#", MessageBoxButtons.OK);
            }
            else dgv1.Rows[e.RowIndex].ErrorText = null;
 
        }
1
freeelijah
53 / 53 / 23
Регистрация: 02.09.2009
Сообщений: 285
11.05.2013, 18:02 3
Для второго пункта надо использовать новое значение смотреть через e.FormattedVlue
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 private void dgv1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        if (e.ColumnIndex == 3 && e.FormattedValue.ToString() != String.Empty)
        {
            int num;
            Boolean bl = int.TryParse(e.FormattedValue.ToString(), out num);
            if (bl == false)
            {
                MessageBox.Show("Input does not correspond to the number format!", "ADO.NET Study", MessageBoxButtons.OK);
                e.Cancel = true;
            }
        }
    }
1
tumanovalex
3 / 3 / 1
Регистрация: 09.07.2009
Сообщений: 287
11.05.2013, 19:50  [ТС] 4
Вариант по п. 1 работает. Попробовал 2 варианта по 2 пункту. Оба варианта работают. Спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2013, 19:50

Контроль корректности введенных данных в PropertyGrid
Здравствуйте! Задача заключается в том, чтобы в поле PropertyGrid можно было вносить только цифры в...

Кнопка для изменения имеющихся данных в DataGridView и базе данных Sql
Здравствуйте! Помогите пожалуйста приделать кнопку Edit, никак не хочет нормально работать, не...

Сохранение данных из datagridview в базу данных под MS sql server 2012
Доброго времени суток. Делаю курсовую, и до этого момента думал, что самое сложное создать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru