1 / 1 / 1
Регистрация: 22.05.2009
Сообщений: 8
1

Что происходит при выполнении метода TableAdapter.Update()

05.02.2012, 17:07. Показов 4645. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача сохранять запись при переходи на следующую строку в DataGridView.

Реализовывать решил в обработчике событий RowValidating, так как есть необходимость проверять заполнено ли некоторое поле и в случае если условие нарушается отменить событие.

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
private void myDataGridView_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
    // Проверка является ли текущая строка строкой для новых записей
    if (!myDataGridView.CurrentRow.IsNewRow)
    {
        // Проверка были ли какие либо изменения над строкой
        if (this.myDataGridView.IsCurrentRowDirty)
        {
            // Проверка пустое ли поле SomeField
            if (!string.IsNullOrEmpty(this.myDataGridView.CurrentRow.Cells["SomeField"].Value.ToString()))
            {
                // Завершить редактирование текущей строки 
                ((DataRowView)this.myDataGridView.CurrentRow.DataBoundItem).EndEdit();
                // Сохранение обьекта myDataTable в базе данных
                this.myTableAdapter.Update(this.myDataSet.myDataTable); // Ошибка
            }
            else
            {
                MessageBox.Show("Не заполнено поле SomeField!", "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Error);
        // Отменить событие
                e.Cancel = true;
            }
        }
    }
}
В случае редактирования строки конструкция выполняется верно (в строке вызова метода Update() выполняется верно составленный SQL запрос описанный в свойстве UpdateCommand).

А вот в случаи добавления новой записи, после выполнения метода Update(), повторно выполняется событие RowValidating исполняя второй круг. Причем, после первого успешного вызова этого метода запись успешно добавляется в базу. А вот на втором круге на этом методе исключение: Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть.

Хочется знать что конкретно происходить в момент вызова метода Update(). Насколько я знаю, на основе состояния текущей строки (а при добавлении строки это DataRowState.Added) выполняется соответствующий InsertCommand. SQL запрос успешно вставляет запись в базу... А вот что потом происходит? Почему тело обработчика событий myDataGridView_RowValidating выполняется повторно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2012, 17:07
Ответы с готовыми решениями:

Не сохраняются изменения в базе данных после запуска метода Update класса TableAdapter
В принципе, проблема изложена в названии темы. Я самоучка, делаю всё так как сказано в учебном...

Ошибка при выполнении UPDATE - No connection associated with this command
SQLiteConnection connect = new SQLiteConnection("Data Source=base.db;"); connect.Open();...

Лаги при выполнении метода в потоке
Из библиотеки VkNet поставил в поток юзать метод Users.Search и добавлять каждую строку в...

Объявлена война с TableAdapter.Update
Уже битый час с ним бьюсь. Не поддается. { passNO =...

2
1 / 1 / 1
Регистрация: 22.05.2009
Сообщений: 8
08.02.2012, 13:52  [ТС] 2
Somebody help?
0
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,079
08.02.2012, 14:00 3
В момент вызова метода происходит вставка и обновление записей в таблице и видимо повторно заполняется грид, что влечет за собой д.п. валидацию. Чет не нравится мне твой подход для обновления записей. Не думаю что это удачная идея засовывать туда Update. Подумай над другими событиями.
0
08.02.2012, 14:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2012, 14:00
Помогаю со студенческими работами здесь

TableAdapter.Update() дублирует строки в БД
Здравствуйте Никак не могу понять по какой причине Adapter упорно делает дубли строк в БД с...

Переопределение запросов TableAdapter-a. Запросы UPDATE и DELETE
Изначально не удавалось отредактировать базу. На форумах нашёл, что неободимо посмотреть свойства...

Формирование Delete и Update запроса для tableAdapter
Добрый день! я формирую insert запрос для tableAdapter'ов(каждый адаптер связан со своей таблицей)...

TableAdapter. Метод Update, написанный вручную, автоматически удаляется
в общем проблема заключается в следующем: в xxxDataSet.xsd в одном из tableAdapter'ов созданных...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru