powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# Обновление dataGridView после изменения данных в БД
5 сообщений из 5, страница 1 из 1
C# Обновление dataGridView после изменения данных в БД
    #39032302
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

У меня на форме dataGridView, пара TextBox и две кнопки:
одна на загрузку данных из бд (ShowFilter),
вторая на изменение значений и полях конкретной записи(UpdateFilter).

При открытии формы я запускаю ShowFilter() и заполняю dataGridView данными из БД.
При вызове процедуры UpdateFilter() происходят изменения в БД, но в dataGridView изменения не видны.
Что-то я явно делаю не так, но что конкретно не пойму.

Вопрос: Что нужно дописать (изменить), чтобы при изменении значения в БД эти же изменения сразу были видны в dataGridView?


Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
public partial class Form1
    {

        FbDataAdapter da;
        DataTable dt;
        DataSet ds;

        private void ShowFilter()
        {
            
            if (fbconn.State == ConnectionState.Closed) //если соединение закрыто - откроем его; Перечисление ConnectionState содержит состояния соединения (подключено/отключено)
            {
                fbconn.Open();
            }

            // Транзакция
            FbTransactionOptions fbto = new FbTransactionOptions();
            fbto.TransactionBehavior = FbTransactionBehavior.NoWait |
                 FbTransactionBehavior.ReadCommitted |
                 FbTransactionBehavior.RecVersion;
            FbTransaction fbt = fbconn.BeginTransaction(fbto);

            FbCommand command = new FbCommand("select * From resume", fbconn, fbt);            
            
            da = new FbDataAdapter(command);
            ds = new DataSet();            
            da.Fill(ds, "Result");
            dt = ds.Tables["Result"];

            dataGridView1.AutoGenerateColumns = false;
            dataGridView1.DataSource = dt;

            fbt.Dispose();
        }
        
        private void UpdateFilter()
        {
            // Транзакция
            FbTransactionOptions fbto = new FbTransactionOptions();
            fbto.TransactionBehavior = FbTransactionBehavior.NoWait |
                 FbTransactionBehavior.ReadCommitted |
                 FbTransactionBehavior.RecVersion;
            FbTransaction fbt = fbconn.BeginTransaction(fbto);

            FbCommand command = new FbCommand("UPDATE resume SET resume_link=@resume_link, user_name=@user_name where resumeid=@resumeid", fbconn, fbt);
            
            da = new FbDataAdapter(command);

            command.Parameters.Clear();
            command.Parameters.AddWithValue("@resume_link", tbFilterLink.Text);
            command.Parameters.AddWithValue("@user_name", tbFilterDescr.Text);
            command.Parameters.AddWithValue("@resumeid", dataGridView1.CurrentRow.Cells["resumeid"].Value);

           
            da.UpdateCommand = command;
            da.UpdateCommand.Connection = fbconn;
            
            da.Fill(dt);

            dataGridView1.AutoGenerateColumns = false;            
            dataGridView1.DataSource = dt;
            
            
            

            fbt.Commit();
            fbt.Dispose();

            //ShowFilter();
        }
    }
...
Рейтинг: 0 / 0
C# Обновление dataGridView после изменения данных в БД
    #39032536
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andMegaM,

насколько я могу судить по приведённому запросу, датаадаптер никак не может заполнить дататэйбл из БД. Он, наоборот, обновляет данные в БД и всё. Обратно он их не читает.

Чтобы обновления были видны, их нужно снова прочитать из БД запросом select.
Если раскомментить последнюю строку то всё нормально?
...
Рейтинг: 0 / 0
C# Обновление dataGridView после изменения данных в БД
    #39032549
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik,

Да, если раскомментить последнюю строку, то данные обновляются.
Только в этом случае очень не удобно получается.
Если большой объем данных, то будут заметны тормоза при перезагрузке данных.
Плюс к тому же курсор с грида улетает на первую строку.
...
Рейтинг: 0 / 0
C# Обновление dataGridView после изменения данных в БД
    #39032559
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andMegaM,

тогда вручную записать значения в ячейки dt. Это если с БД работает один пользователь.

А если с БД работают несколько пользователей и данные они могут менять одновременно, то придётся их читать оттуда. Но можно не все: "select * ", а лишь только что записанные (чтобы убедиться в отсутствии конфликтов с другими юзерами):
Код: sql
1.
2.
3.
select resume_link, user_name
from resume
where resumeid=@resumeid


Что-то в этом духе.
...
Рейтинг: 0 / 0
C# Обновление dataGridView после изменения данных в БД
    #39032565
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в последнем случае новые данные нужно сливать с уже имеющимися методом Merge у DataTable/DataSet.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# Обновление dataGridView после изменения данных в БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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