Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
sysrepos
37 / 37 / 15
Регистрация: 08.08.2013
Сообщений: 301
Записей в блоге: 1
#1

Ячейка DataGridView читается только со второго раза - C#

17.02.2016, 00:38. Просмотров 172. Ответов 2
Метки нет (Все метки)

в качестве тренировки пытаюсь написать записную книжку.
Есть форма, на ней dataGridView1 (1 колонка - номер, 2 - имя, 3 - телефон).
Первая колонка нумеруется автоматически таким кодом:

C#
1
2
3
4
5
6
7
8
9
10
11
        // добавить нумерацию
        private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
 
            object head = this.dataGridView1.Rows[e.RowIndex].HeaderCell.Value;
            if (head == null || !head.Equals((e.RowIndex + 1).ToString()))
            {
                this.dataGridView1.Rows[e.RowIndex].HeaderCell.Value = (e.RowIndex + 1).ToString();
                this.dataGridView1.Rows[e.RowIndex].Cells[0].Value = (e.RowIndex + 1).ToString();
            }
        }
есть кнопка "добавить запись". Появляется новая форма, в ней вводятся имя, телефон. Добавляется новая строка с соответствующими данными.
Далее проблема: после добавления новой строки идет метод Record(); записи содержимого dataGridView1 в файл .
Но ячейка с номером с первого раза не читается, а читается только со второго раза.
Как сделать так, чтобы сразу читалось?

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
25
26
27
28
29
 private void button1_Click(object sender, EventArgs e) //ADD form1
        {
  
            Data.b = false;
            string[] rows1 = new string[3];
            
            frm2_add frm2 = new frm2_add();
 
 
            frm2.ShowDialog();
 
            
            if (Data.b) //если в окне адд была нажата кнопка ок
            {
                rows1[0] = "";
                rows1[1] = Data.name;
                rows1[2] = Data.tel;
 
                this.dataGridView1.Rows.Add(rows1);
                  
            }
 
 
MessageBox.Show(dataGridView1.Rows[0].Cells[0].Value.ToString()); // ЗНАЧЕНИЕ БУДЕТ ""
MessageBox.Show(dataGridView1.Rows[0].Cells[0].Value.ToString()); // ЗНАЧЕНИЕ БУДЕТ 1
 
            //Record();
 
        }
0
Вложения
Тип файла: rar Записная книжка.rar (65.0 Кб, 1 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2016, 00:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ячейка DataGridView читается только со второго раза (C#):

Приложение запуcкается только со второго раза - C#
Пишу небольшое клиент серверное приложение. И обратил внимание на то что у сервера появилась неясная мне способность: когда я запускаю его...

Файл в Openfiledialog выбирается только со второго раза - C#
private void Open_btn_Click(object sender, EventArgs e) { string filePath; openFileDialog1.Title =...

ContextMenuStrip начинает работать только после второго раза - C#
Сделал меню правой кнопки мыши для Datagridview. Но не могу понять, запустил приложение, кликаю 1 раз, меню не появляется, кликнул второй...

Ячейка в DataGridView - C#
Добрый день! Подскажите как запретить ввод цифр и всяки знаков в ячейку datagridview??

Datagridview и высокая ячейка - C#
Приветствую. Проблема заключается в следующем: Имеется datagridview на фиксированной форме. Если ячейка с данными по высоте...

Мигающая ячейка datagridview - C#
Добрый день. К примеру, есть две ячейки в datagridview. В первой значение сравнивается с X. Если значение меньше, чем X, то ячейка...

2
Даценд
Модератор
Эксперт .NET
4039 / 3878 / 1953
Регистрация: 20.04.2015
Сообщений: 7,042
17.02.2016, 01:32 #2
sysrepos,
стр. 15:
C#
1
rows1[0] = (dataGridView1.RowCount+1).ToString();
А зачем понадобилась Data.b?
Это делается проще. Для кнопки OK на 2-й форме устанавливается свойство DialogResult = OK, а проверка делается так:
C#
1
2
3
4
5
6
7
if (frm2.ShowDialog() == DialogResult.OK) //отдельно строка frm2.ShowDialog(); не нужна
{
    rows1[0] = (dataGridView1.RowCount + 1).ToString();
    rows1[1] = Data.name;
    rows1[2] = Data.tel;
    this.dataGridView1.Rows.Add(rows1);
}
И в обработчике кнопки OK при этом не нужно указывать
C#
1
this.Close();
Ну и много других мелочей и не только, которые бросаются в глаза и которые стоило бы реализовать по-другому.
1
sysrepos
37 / 37 / 15
Регистрация: 08.08.2013
Сообщений: 301
Записей в блоге: 1
17.02.2016, 23:41  [ТС] #3
ок, спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2016, 23:41
Привет! Вот еще темы с ответами:

.NET 3.x Ячейка типа Button в dataGridView - C#
Суть проблемы такова. На форме имеется dataGridView, в котором 3 колонки: средняя составляется запросом к БД, а вот те, что по бокам......

Ячейка datagridview как ссылка - C#
Надо сделать действие указанное на рисунке. В столбце а datagridview забивается код. По клику строки должна появляться остальная информация...

Кликнув на DataGridView не запоминается выделенная ячейка - C#
Имеется DataGridView с именем field. Мультиселект выключен. Имеется переменная Point? selectedCell; Если null - ни одна ячейка не...

DataGridView: ячейка типа System.Color - C#
Добрый день! есть DataTable, которая заполняется из списка List<T> объектов. Одно и свойств объекта имеет тип System.Color. ...


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

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

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