Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/470: Рейтинг темы: голосов - 470, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 21.10.2013
Сообщений: 4

Обновление DataGridView после операции

21.10.2013, 22:04. Показов 89747. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Недавно начал изучать С#,решил создать клиент по работе с базой Access.
Сделал две формы,на первой в datagridview выводится даза а вторая форма добавляет записи в базу.
После того как добавляю запись сам datagridview не обновляется,только если закрыть а потом отрыть приложение тогда видна новая запись.

Как обновить или,что можно сделать чтоб после закрытия второй формы datagridview обновился?
Вот покажу мой код:

Form1

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
using System.Data.OleDb;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
        }
               
        OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\base.mdb");
        OleDbCommand com = new OleDbCommand();
        OleDbDataAdapter adap = new OleDbDataAdapter();
        DataTable dt = new DataTable();
 
        public void Form1_Load(object sender, EventArgs e)
        {
 
            DataSet ds = new DataSet();
            com.Connection = conn;
            com.CommandText = "Select * from base";
            conn.Open();
            adap.SelectCommand = com;
            adap.Fill(ds);
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            conn.Close();
 
         }
Form2

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
using System.Data.OleDb;
namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            using (var connection = new OleDbConnection("Provider=" + "Microsoft.Jet.OLEDB.4.0;Data Source=C:\\base.mdb"))
            {
                connection.Open();
                using (OleDbCommand command = connection.CreateCommand())
                {
                    command.CommandText = "INSERT INTO base (name,address) values ('" + textBox1.Text + "','" + textBox2.Text + "');";
                    int numberOfUpdatedItems = command.ExecuteNonQuery();
                }
                connection.Close();
 
                this.Close();
            }
        }
    }
}
Помогите пожалуйста новичку.
Заранее спасибо.

Добавлено через 5 часов 57 минут
неужели никто не поможет.?
Help!!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2013, 22:04
Ответы с готовыми решениями:

Обновление dataGridview после работы с БД
На родительской форме я показываю таблицу через dataGrid, а на подчиненной делаю запись через Insert. По закрытию формы пытаюсь обновить...

Обновление DataGridView после добавления данных в БД
Здравствуйте, подскажите пожалуйста когда добавляю данные в БД в DataGrid данные не обновляются, как сделать чтобы данные обновлялись после...

Обновление БД sql после редактирования DataGridView
Доброго времени суток) Подскажите пожалуйста.... уже второй день бьюсь не могу найти ничего путевого по проблеме занесения измененных...

18
 Аватар для Soundpro
89 / 86 / 39
Регистрация: 19.10.2012
Сообщений: 243
21.10.2013, 22:08
C#
1
dataGridView1.Refresh();
2
1 / 1 / 0
Регистрация: 21.10.2013
Сообщений: 4
22.10.2013, 08:07  [ТС]
Не dataGridView1.Refresh(); и не dataGridView1.Update(); не помогает.
0
 Аватар для Soundpro
89 / 86 / 39
Регистрация: 19.10.2012
Сообщений: 243
22.10.2013, 09:17
Попробуйте с событии закрытии второй формы написать:
C#
1
2
3
4
5
6
7
8
9
            DataSet ds = new DataSet();
            com.Connection = conn;
            com.CommandText = "Select * from base";
            conn.Open();
            adap.SelectCommand = com;
            adap.Fill(ds);
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            conn.Close();
если из второй формы нет доступа к элементу datagridview1, то посмотрите как это делается, на форуме об этом раз 100 спрашивали.
2
1 / 1 / 0
Регистрация: 21.10.2013
Сообщений: 4
22.10.2013, 09:28  [ТС]
Непомогает.
0
 Аватар для Soundpro
89 / 86 / 39
Регистрация: 19.10.2012
Сообщений: 243
22.10.2013, 09:50
Я не могу поверить, что не помогло перезаполнение таблицы из 2ой формы. Вы под событием Form2_OnFormClosing это вписали?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\base.mdb");
        OleDbCommand com = new OleDbCommand();
        OleDbDataAdapter adap = new OleDbDataAdapter();
        DataTable dt = new DataTable();
            DataSet ds = new DataSet();
            com.Connection = conn;
            com.CommandText = "Select * from base";
            conn.Open();
            adap.SelectCommand = com;
            adap.Fill(ds);
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            conn.Close();
2
61 / 61 / 14
Регистрация: 06.10.2013
Сообщений: 133
22.10.2013, 09:57
предлагаю вот такой вариант
C#
1
2
3
4
5
6
7
8
9
10
11
OleDbCommand insertcommand = new OleDbCommand("INSERT INTO base(name, address) values(@name1, @address1)", connection);
      insertcommand.Parameters.AddWithValue("@name1", textBox1.Text);
      insertcommand.Parameters.AddWithValue("@address1", textBox2.Text);
      try
      {
        insertcommand.ExecuteNonQuery();
      }
      catch (OleDbException ex)
      {
        MessageBox.Show(ex.Message);
      }
1
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
22.10.2013, 10:12
А ларчик просто открывался.... У ТС данные из БД загружаются только при открытии формы
zuraSYS, дело в том, что в базу у тебя данные попадают напрямую, а не через источник.
В твоём случае есть 2 варианта решения проблемы:
1) Сразу после добавления производить повторную загрузку данных
2) Работать с источником данных, а все сохранения проводить не прямым запросом, а адаптером (только предварительно настроить запросы обновления)
3
25 / 25 / 3
Регистрация: 10.06.2009
Сообщений: 134
22.10.2013, 10:22
Soundpro, определять OleDb-типы повторно нету смысла - они уже определены у него как глобальные.
zuraSYS, из события загрузки формы вынеси в отдельный метод сам запрос и заполнение DataSet. Вызывай этот метод при любом изменении самой базы данных, то есть при загрузке основной формы и при вставке элемента в БД в другой - данные в DataGridView, если не ошибаюсь, обновятся сами по изменению в DataSet (если нет - вынеси также в этот метод привязку DataSet в DataGridView). Так же можно перенести метод закрытия БД в событие закрытия главной формы - позволит не открывать/закрывать по 100500 раз базу.
1
1 / 1 / 0
Регистрация: 21.10.2013
Сообщений: 4
22.10.2013, 10:45  [ТС]
Огромное спасибо всем.
Решил немного подругому.

На второй форме на кнобку в DialogResult поставил OK.
А на первой форме


C#
1
2
3
4
5
6
7
 DialogResult dr = new DialogResult();
            Form2 frm2 = new Form2();
            dr = frm2.ShowDialog();
            if (dr == DialogResult.OK)
            {
                this.base_load();
            }
Ну где this.base_load(); там


C#
1
2
3
4
5
6
7
8
9
  DataSet ds = new DataSet();
            com.Connection = conn;
            com.CommandText = "Select * from base ORDER BY id DESC";
            conn.Open();
            adap.SelectCommand = com;
            adap.Fill(ds);
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            conn.Close();
и все заработало так как мне надо.
Незнаю правильно ли это?
Програмирую в C# уже 2 дня
1
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
07.09.2017, 10:39
Грация! Не самое, конечно, лучшее решение, но работает
0
54 / 48 / 31
Регистрация: 14.04.2015
Сообщений: 273
11.09.2017, 08:46
ау....не знаю нашли вы ответ или нет, обновите сам DataSet.

C#
1
adap.Update(set, "qwe");
по идеи должно работать на 100% =)

Сколько бы вы не обновляли DGV данные у вас не обновляются загруженные в DataSet.

Цитата Сообщение от zuraSYS Посмотреть сообщение
adap.Fill(ds);
---- вот загрузили, по работали, добавили удалили, а где данные обновляеться ?!
0
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
12.09.2017, 14:30
Т.к. на, допустим, моей форме присутствует и контекстное меню с "обновить", и кнопка "Обновить" в ToolStrip, ну и данные добавляются из второй формы, то, да, Ваш вариант тут подходит. С обновлением TableAdapter.

C#
1
2
3
4
5
dr = frmaddorg.ShowDialog();
            if (dr == DialogResult.OK)
            {
                this.gSDBOrganizationsTableAdapter.Fill(this.organizations.GSDBOrganizations);
            }
Ну, и код на фокусе формы, к тому же. При подключении клиент-сервер, при изменении данных другим пользователем очень актуально.
2
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
13.07.2018, 09:19
Разрешите три вопроса, решил заморочиться и сделать привязку к datagrid view посредством visual. Потом сделаю вручную.
1. Чтобы обновить data grid view я вызываю заполнение адаптера как на скрине, а dataset тогда кто заполняет?
2. Выполняя программу я заполняю бд. Но с каждым запуском у меня всегда в бд одна строка, это прикол visual, он каждый раз при запуске отладки перезаписывает мою бд рядом с запускаемой программой?
Миниатюры
Обновление DataGridView после операции   Обновление DataGridView после операции  
Изображения
 
0
54 / 48 / 31
Регистрация: 14.04.2015
Сообщений: 273
16.07.2018, 02:59
Цитата Сообщение от leonidSDF Посмотреть сообщение
1. Чтобы обновить data grid view я вызываю заполнение адаптера как на скрине, а dataset тогда кто заполняет?
Что бы обновить данные в таблице надо несколько условий.

1. Чтоб было подключенно
C#
1
2
3
            adapter.UpdateCommand = command.GetUpdateCommand();
            adapter.InsertCommand = command.GetInsertCommand();
            adapter.DeleteCommand = command.GetDeleteCommand();
2. Чтоб отображались обязательно ключевые поля.
3. Делай обновление не заполнением а обновлением Update и все будет работать.


Раньше сталкивался с этой проблемой, отошел от этого и начал подключать всё руками, вычитал на просторах интернета инфу, проверил все работает.
1
 Аватар для Wolflind
127 / 107 / 31
Регистрация: 17.03.2016
Сообщений: 445
Записей в блоге: 1
20.07.2018, 14:25
C#
1
2
dataGridView1.DataSource = null;
dataGridView1.DataSource = dt;
Может не совсем и хорошо но работает

Добавлено через 4 минуты
и вместо
C#
1
conn.Open();
и
C#
1
conn.Close();
лучше используй

C#
1
2
3
4
5
6
                DataSet dataset = new DataSet();
               SqlCommand sLcom; //и т.д.
                using (SqlDataAdapter dataAdapter = new SqlDataAdapter(adap))
                {
                    dataAdapter.Fill(dataset);
                }
1
0 / 0 / 0
Регистрация: 10.12.2017
Сообщений: 16
24.11.2018, 01:35
Welcome20, не подскажете, в какой части кода необходимо подключать ?
0
54 / 48 / 31
Регистрация: 14.04.2015
Сообщений: 273
26.11.2018, 02:50
Sherlock_hlms, Смотря что именно ?
Цитата Сообщение от Welcome20 Посмотреть сообщение
1. Чтоб было подключенно
если вы про это то, перед тем как будете выполнять запрос.
0
2 / 2 / 0
Регистрация: 06.04.2017
Сообщений: 16
14.01.2019, 17:34
Может уже поздновато и не актуально, но у меня все с одной строкой работает:
C#
1
this.suppliesTableAdapter.Fill(this.homeConnect.supplies);
1) supplies - имя таблицы из бд;
2) homeConnect - название подключения(которое указывается при добавлении источника данных к проекту).
____
А вообще говоря, логично использовать тот же код, с помощью которого вы отобразили данные на форме в гриде.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.01.2019, 17:34
Помогаю со студенческими работами здесь

Обновление DataGridView после добавления данных в БД
На панели имеется DataGridView, необходимо после добавления в БД чтобы DataGridView обновлялся т.д. показывал изменения после данного...

Обновление содержимого DataGridView после изменений в базе
Все примеры найденные в интернете не помогают. Посмотрите пожалуйста кто может проект,архив прилагаю. Например в Rashodi.cs со...

Обновление содержимого DataGridView после изменений в базе
Проблема в следующем. Добавляю новую строку в таблицу: clientsTableAdapter.InsertQuery(id, name, email);Привязанный к таблице...

Как реализовать обновление Form1.DataGridView после закрытия Form2?
Посоветуйте пожалуйста как сделать чтобы DataGridView обновлял данные? Есть две формы Form1 и Form2. Данные добавляются в таблицу через...

Обновление базы данных после редактирования в dataGridView.
Обновление базы данных после редактирования в dataGridView. Первая кнопка вытаскивает все столбцы таблицы item в dataGridView3, здесь...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru