Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
skynet80
10 / 10 / 7
Регистрация: 17.05.2009
Сообщений: 140
1

Обновление datagridview при добавление в БД новых записей

05.02.2014, 18:39. Просмотров 1849. Ответов 5
Метки нет (Все метки)

Здравствуйте.
Сейчас у меня при загрузке приложения заполняется datagridview. В ходе работы через отдельную форму добавляются/изменяются данные. Причем данные добавляются/изменяются путем sql запроса к БД. Хотел сделать изменять/добавлять строки в гриде и вызывать dataAdpter.Update, но отказался от этого по причине того что есть поле ID (AUTO_INCREMENT), которое нужно в таблице.
Из выше сказанного получается необходимо выполнять новые запросы и перезаполнять DataSet.

Или есть более правильные способы?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2014, 18:39
Ответы с готовыми решениями:

Добавление новых данных в DataGridView
Добрый день. Очень долго мучаюсь с этой проблемой... Есть база данных SQL. В ней таблицы Клиенты,...

На новой форме организовать добавление новых записей
Помогите пожалуйста. Имеется база данных Access. Нужно на новой форме организовать добавление новых...

Вывод, сохранение изменений, добавление новых записей в базу MS SQLCE 4.0
Доброе время суток, задам изъезженный вопрос наверное в 100 раз, но решение найти так и не смог,...

Обновление записей в datagridview
Есть две таблицы в access с одним числовым полем, скрни ниже. Можно ли сделать, чтобы из левой...

Добавление в базу данных, обновление записей
Делаю приложение для БД в C#. Подключил базу, сделал TextBox, в котором выбираю, какую табличку...

5
kesean
276 / 275 / 108
Регистрация: 04.09.2010
Сообщений: 638
Завершенные тесты: 1
05.02.2014, 20:47 2
Для начала 2. Как передать данный из одной формы в другую
Далее, при изменении данных вовторой форме, нужно изменить объект, используемый в качестве DataSource для грида. Данные в гриде изменятся соответственно
0
skynet80
10 / 10 / 7
Регистрация: 17.05.2009
Сообщений: 140
05.02.2014, 21:45  [ТС] 3
Цитата Сообщение от kesean Посмотреть сообщение
Далее, при изменении данных вовторой форме, нужно изменить объект, используемый в качестве DataSource для грида. Данные в гриде изменятся соответственно
А как тогда занести в DataSet поле Id (в бд является счетчиком), который назначается СУБД автоматом?
0
kesean
276 / 275 / 108
Регистрация: 04.09.2010
Сообщений: 638
Завершенные тесты: 1
05.02.2014, 22:23 4
Если идет изменение данных, то это поле не трогаем. Изменяем остальные.
При добавлении используем DataTable.NewRow() Поле счетчика, опять таки не трогаем
И неплохо было бы почитать про работу с ADO.Net
0
skynet80
10 / 10 / 7
Регистрация: 17.05.2009
Сообщений: 140
05.02.2014, 23:10  [ТС] 5
kesean, Сделал как Вы сказали. Запись добавилась в грид, но поле ID пустое.
Так как все таки отобразить тот же ID, если он создается в СУБД?
Ниже код как добавлял
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
Form1 main = this.Owner as Form1;
            if (main != null)
            {
                
                     DataRow row = main.ds.Tables["plat1"].NewRow();
                    
                     row["FAM"] = tFam.Text;
                     row["NAME"] = tName.Text;
                     row["FATHER"] = tFather.Text;
                    
                     row["INDEX"] = tIndex.Text;
                     row["Adress"] = adress;
                     //...
                     main.ds.Tables["plat1"].Rows.Add(row);
                    
                     main.da.InsertCommand = new MySqlCommand("insert into plat " +
               "(`FAM`,`NAME`,`FATHER`,`INDEX`,`Adress`)" +
                "Values (@FAM, @NAME, @FATHER, @INDEX, @Adress)");
                    
                     main.da.InsertCommand.Parameters.Add("@FAM", MySqlDbType.Text, 24, "FAM");
                     main.da.InsertCommand.Parameters.Add("@NAME", MySqlDbType.Text, 24, "NAME");
                     main.da.InsertCommand.Parameters.Add("@FATHER", MySqlDbType.Text, 24, "FATHER");
                     main.da.InsertCommand.Parameters.Add("@INDEX", MySqlDbType.Text, 6, "INDEX");
                     main.da.InsertCommand.Parameters.Add("@Adress", MySqlDbType.Text, 120, "Adress");
                     
                     MySqlConnection con = new MySqlConnection();
                     con.ConnectionString = "Database=fixplat;Data Source=localhost;User Id=root1;Password=123456;charset=utf8;";
                     con.Open();
                     main.da.InsertCommand.Connection = con;
                     main.db.EndEdit();
                     main.da.Update((DataSet)main.db.DataSource, "plat1");
                     main.dataGridView1.Refresh();
                     con.Close();
             }
и как заполняется Грид

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 string sSql = "select * from plat";
con.ConnectionString = "Database=fixplat;Data Source=localhost;User Id=root1;Password=123456;charset=utf8;";
                    con.Open();
                    MySqlCommand cmd = new MySqlCommand(sSql, con);
                    ds = new DataSet();
 
                    da = new MySqlDataAdapter(cmd);
 
                    
                    MySqlCommand cmd1 = new MySqlCommand("select* from pcalc");
 
                    da1 = new MySqlDataAdapter(cmd1);
                    da.Fill(ds, "plat1");
                    da1.Fill(ds, "pcalc");
 
                    DataRelation dataRelation = new DataRelation("RNPFR1", ds.Tables["plat1"].Columns["RNPFR"], ds.Tables["pcalc"].Columns["RNPFR"]);
                    ds.Relations.Add(dataRelation);
                    
                    db = new BindingSource(ds, "plat1");
                    db1 = new BindingSource(db, "RNPFR1");
                    
                    dataGridView1.DataSource = db;
                    dataGridView2.DataSource = db1;
0
kodv
1425 / 1098 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
06.02.2014, 08:10 6
skynet80, Универсальный способ выглядит примерно так:
C#
1
2
3
4
5
main.da.RowUpdated += (sender, e) =>
    {
        if (e.StatementType == System.Data.StatementType.Insert)
            e.Row["Id"] = (int)(new MySqlCommand("SELECT @@IDENTITY", e.Command.Connection)).ExecuteScalar();
    };(
В смысле, обработать вышописанным способом событие MySqlDataAdapter.RowUpdated.

Неуниверсальный способ:
Если СУБД позволяет, то можно создать хранимую процедуру с OUTPUT-параметром, через который будет возвращаться новый ID. В C# для этого параметра задается SourceColumn = "Id", и тогда после выполнения Update Id-ы в вашей таблице обновятся самостоятельно
0
06.02.2014, 08:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2014, 08:10

Обновление, вставка и удаление записей в SQL через DataGridView
Добрый вечер всем! :) Подскажите, пожалуйста, кого не затруднит, как решить проблему. Из БД (MS...

Удаление/добавление/обновление строк в БД(Mysql) через dataGridView
Через процедуру заношу в dataGridView данные из таблицы: string sql = "call...

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


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

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

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