powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Обновление datagridview через другую форму
17 сообщений из 17, страница 1 из 1
Обновление datagridview через другую форму
    #33884121
Kicel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая проблема: мастер форма с гридом и детейл форма с текстбоксами,
где редактирую или добавляю запись:

мастер форм с гридом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
        private void Edit(OperationType operationType)
        {
            int myCompany =  0 ;
            CurrencyManager crm = (CurrencyManager)BindingContext[dataGridView1.DataSource, null];

            if (OperationType.Edit == operationType)
            {
                DataRowView drv1 = (DataRowView)crm.Current;
                myCompany = (Int32)drv1["Rowid"];
            }

            frmCompany newform = new frmCompany(myCompany);

            if (newform.ShowDialog(this) == DialogResult.OK)
            {
                this.BindingContext[ds.Tables["company"]].EndCurrentEdit();
                ds.Clear();
                companyDA.Fill(ds, "company");
                myBindingSource.DataSource = ds.Tables["company"];
                dataGridView1.DataSource = myBindingSource.DataSource;
                dataGridView1.Refresh();
            }
        }

детейл форм - кнопка закрытия:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
      private void btnClose_Click(object sender, EventArgs e)
        {
            m_dataRowView.EndEdit();
            compDA.Update(myDS, "company");
            myDS.AcceptChanges();
            this.DialogResult = DialogResult.OK;
            this.Close();
        }

Собственно проблема: когда происходит добавление записи, то в гриде новая запись появляется иногда сразу, а иногда нет, т.е. через несколько добавлений могут появиться сразу две записи. Причем физически в базе они появляются сразу. Такое ощущение что они где-то в буфере застряли.
Перепробовал несколько вариантов, найденных на форуме и в мсдн, с передачей в детейл форму датасетов и т.д. - результат одинаковый. Причем в другом проекте все работает без проблем (там только набор текстбоксов и имена таблиц другие).
Прошу помощи: где я облажался-то?
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #33887259
Tolya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно уж скажу, но такую простую вещь столило бы знать. Она возникает только во 2-ом фреймворке. Там есть такой метод DataBind называется. Он был специально добавлен для минимизации трафика в режиме отсоединённого подлючения. Но стало не очень удобно. Попробуй создать оболочку для Sql чтобы не думать, вызвал ты его или забыл. Это не так просто, ибо все классы по работе с данными являются sealed. Поэтому прийдётся создать класс супероболочку и все свойства делегировать, ну как обычно это делается в COM.
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #33887414
Kicel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TolyaЛадно уж скажу, но такую простую вещь столило бы знать. Она возникает только во 2-ом фреймворке. Там есть такой метод DataBind называется. Он был специально добавлен для минимизации трафика в режиме отсоединённого подлючения. Но стало не очень удобно. Попробуй создать оболочку для Sql чтобы не думать, вызвал ты его или забыл. Это не так просто, ибо все классы по работе с данными являются sealed. Поэтому прийдётся создать класс супероболочку и все свойства делегировать, ну как обычно это делается в COM.

Спасибо конечно за инфу, но в данном конкретно случае меня интересует почему
данные буферезуются где-то (причем не всегда!). И где находится способы этим управлять. Потому-что
я перепробовал много вариантов с решениями из "официальных источников" по аналогичным проблемам и эти решения не работают в этом моем случае. Мне понятно что я что-то недопонимаю, но что?
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #33890748
Kicel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потестировал на разных компах и вот результат: этот код нормально работает на win xp (prof & home) и неработает на win2000. Версии framework одинаковые и на машине с win2000 стоят все текущие апдейты. Что это может быть?
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #33995690
Kicel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вынужден снова поднять тему т.к. наткнулся на аналогичное поведение в другом проекте. Причем не зависящее от версии ОС. Проблема в следующем:
имеются две формы (из одной вызывается другая), в каждой свой dataset с одинаковыми таблицами. Если сделать обновление во второй форме, то в первой данные могут иногда не обновится, а иногда обновится частично, т.е. появится например не три записи а только две. Причем физически обновление данных происходит. Использовать один dataset, а не два, конечно можно, но интересует не системность появления этого бага. Такое ощущение что где-то в буфере сидят данные. Вопрос: кто-нибудь сталкивался с таким явлением или это результат только моих изысканий?
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #33995772
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kicel
Использовать один dataset, а не два, конечно можно, но интересует не системность появления этого бага. Такое ощущение что где-то в буфере сидят данные. Вопрос: кто-нибудь сталкивался с таким явлением или это результат только моих изысканий?

А вы можете воспроизвести это в тестовом проекте и разместить сюда, а мы уж посмотрим...

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #34001870
Kicel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую объяснить на этой упрощенной схеме:
Допустим есть 2 формы: 1-ая с гридом и 2-ая с текстбоксами.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
          
          // во  2 -ой  форме сделали изменения в таблице company (в форме свой dataset, 
          //изменения физически проходят )
           DeliveryList newform = new DeliveryList(myInvoice);
           if (newform.ShowDialog(this) == DialogResult.OK) 
            {
                // здесь нужно получить таблицу company с изменениями
                OleDbDataAdapter tempDA = new OleDbDataAdapter("select * from company",cn);
                tempDA.Fill(ds, "temp");

                // здесь выводим таблицу в грид - а в нем  новых изменений нет!!!
               dg.DataSource = ds.Tables["temp"];
            }

Как победить такое?
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #34001908
Kicel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю: connections в формах открываю по новой.
Может в этом засада?
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #34001985
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kicel
Как победить такое?

А вызов метода update у вас где?

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #34002028
Kicel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa
Kicel
Как победить такое?

А вызов метода update у вас где?

Код: plaintext
 uid  =  S a
Posted via ActualForum NNTP Server 1.3

А почему это имеет значение? В форме №1 я не делаю никаких изменений с данными - просто вывожу их в грид, а после формы №2 изменения точно происходят. Хотя я согласен - может именно тут я и заблудился: чтобы получить свежие данные в dataset мне нужно его как-то обновить?
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #34002060
Kicel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OleDbDataAdapter tempDA = new OleDbDataAdapter("select * from company",cn);
tempDA.Fill(ds, "temp"); -- а разве вот здесь я не получу свежие данные?
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #34002136
Kicel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa
Kicel
Как победить такое?

А вызов метода update у вас где?

Код: plaintext
 uid  =  S a
Posted via ActualForum NNTP Server 1.3

Код: plaintext
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 btnClose_Click(object sender, EventArgs e)
        {
            if (dgSostav.SelectedRows.Count >  0 )
            {
                DialogResult dr = MessageBox.Show("Do you want to save selected deliveries ?", "Confirm selection", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dr == DialogResult.Yes)
                {
                        if (cn.State != ConnectionState.Open)
                            cn.Open();
                        OleDbDataAdapter dDA = new OleDbDataAdapter();
                        dDA.UpdateCommand = cn.CreateCommand();

                        int nomer;
                        foreach (DataGridViewRow row in dgSostav.SelectedRows)
                        {
                            nomer = Convert.ToInt32(row.Cells["rowid"].Value);
                            dDA.UpdateCommand.CommandText = "update [company] set [invoicerowid]=" + myInvoice +
                                                            " where [rowid]=" + nomer;
                            dDA.UpdateCommand.ExecuteNonQuery();
                        }
                        
                    this.DialogResult = DialogResult.OK;
                }
            }
            this.Close();
        }

Это код на сохранение из второй формы.
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #34002218
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kicel
Это код на сохранение из второй формы.

Может я чего не понимаю.
Но правильный алгоритм действий должен быть примерно следующим:
1) изменили данные в DataSet или DataTable
2) вызвали метод Update вашего DataAdapter'а (У DataAdapter настроены комАнды Select, Insert,Delete, Update), для внесения изменений в БД.
3) Закомитили записи, например myDataTable.AcceptChanges()

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #34002313
Kicel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa
Kicel
Это код на сохранение из второй формы.

Может я чего не понимаю.
Но правильный алгоритм действий должен быть примерно следующим:
1) изменили данные в DataSet или DataTable
2) вызвали метод Update вашего DataAdapter'а (У DataAdapter настроены комАнды Select, Insert,Delete, Update), для внесения изменений в БД.
3) Закомитили записи, например myDataTable.AcceptChanges()

Код: plaintext
 uid  =  S a
Posted via ActualForum NNTP Server 1.3

Спасибо за внимание!
Если эти замечания относятся ко второй форме, т.е. где происходят все изменения - то приведенный вариант работает нормально - обновленные данные попадают в базу - я уверен, т.к. делал проверки (база Access - открыл-посмотрел-увидел изменения). Тот код, что я привел, уже не знаю какой по счету вариант, а до него были и по приведенной схеме (Select, Insert,Delete, Update и т.д.)
Я думаю , что проблема в форме №1. Но где?
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #34002347
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все равно мне код во второй форме не нравиться.

Kicel
OleDbDataAdapter tempDA = new OleDbDataAdapter("select * from company",cn);
tempDA.Fill(ds, "temp"); -- а разве вот здесь я не получу свежие данные?

Добавьте до Fill Clear() и посмотрите, например так:
Код: plaintext
1.
2.
3.
OleDbDataAdapter tempDA = new OleDbDataAdapter("select * from company",cn);
 ds.Clear();
tempDA.Fill(ds, "temp"); -- а разве вот здесь я не получу свежие данные?

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #34002393
Kicel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sa
Все равно мне код во второй форме не нравиться.

Kicel
OleDbDataAdapter tempDA = new OleDbDataAdapter("select * from company",cn);
tempDA.Fill(ds, "temp"); -- а разве вот здесь я не получу свежие данные?

Добавьте до Fill Clear() и посмотрите, например так:
Код: plaintext
1.
2.
3.
OleDbDataAdapter tempDA = new OleDbDataAdapter("select * from company",cn);
 ds.Clear();
tempDA.Fill(ds, "temp"); -- а разве вот здесь я не получу свежие данные?

Код: plaintext
 uid  =  S a
Posted via ActualForum NNTP Server 1.3

мне тоже код не нравится.
попробовал clear() - результат тотже.
может дело вот в этом:

Код: plaintext
dDA.UpdateCommand.ExecuteNonQuery();

после этой строки изменения есть, но может dataset их не видит?
...
Рейтинг: 0 / 0
Обновление datagridview через другую форму
    #34002413
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kicel
dDA.UpdateCommand.ExecuteNonQuery();
после этой строки изменения есть, но может dataset их не видит?

не надо так делать.
не вижу смысла вызывать UpdateCommand таким образом, вызывайте Update() как я писал выше.

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Обновление datagridview через другую форму
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]