Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176

Обновление данных в datagridview

17.02.2013, 18:20. Показов 5930. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
У меня есть бд Access. Из неё берутся данные и заносятся в datagridview1 с помощью кода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            OleDbConnection connection = new OleDbConnection(connectionString);
            string sql = "SELECT code,type,forma FROM napravlenie";
            OleDbCommand command = new OleDbCommand(sql, connection);
            connection.Open();
            OleDbDataReader rdr = command.ExecuteReader();
            if (connection.State.ToString() == "Open")
            {
                int i = 0;
                while (rdr.Read())
                {
                    dataGridView1.Rows.Add();
                    dataGridView1.Rows[i].Cells[0].Value = rdr[0].ToString() + "." + rdr[1].ToString();
                    dataGridView1.Rows[i].Cells[1].Value = rdr[2].ToString();
                    i++;
                }
                rdr.Close();
                connection.Close();
            }
далее идёт другой код,затем добавление данных с помощью INSERT

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

На форуме находил с использованием adapter'а с методом Fill,но он добавляет данные так,как они хранятся в бд,с названиями колонок,как в бд. А мне надо,чтобы колонки я называл сам(но не это важно),плюс одно поле в datagridview получалось слиянием двух полей из бд(вот это важно).
Есть идеи?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2013, 18:20
Ответы с готовыми решениями:

Обновление данных в DataGridView
у меня есть код,все работает.По запросу из БД выводится информация. НО потом я вношу изменения в БД (MS Access),потом запускаю вижуал,свой...

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

Обновление данных из DataGridView в БД
Доброго всем дня! Я новичок в этом деле, но очень хочу разобраться. Ситуация в следующем. У меня есть форма, в которой пользователь...

15
119 / 119 / 25
Регистрация: 03.03.2010
Сообщений: 436
17.02.2013, 19:02
Заполняйте через Fill. Колонки можно переименовать потом в коде:
C#
1
2
3
dataGridView1.Columns[0].HeaderText = "Номер";
                    dataGridView1.Columns[1].HeaderText = "Дата";
                    dataGridView1.Columns[2].HeaderText = "Оператор";
Метод Fill аналогично использует SQL-запрос, и можете выполнить слияние с его помощью.
C#
1
2
3
4
5
string list = "Select * from naklad order by sostoyanie,data desc";
                    con.Open();
                    ds.Clear();
                    da = new SqlDataAdapter(list, con);
                    da.Fill(ds, "naklad");
Для Access попробуйте так
SQL
1
SELECT (code & ' ' & tipe ) AS KOD FROM ...
Добавлено через 6 минут
Или как нибудь так
SQL
1
SELECT col1 FROM TABLE UNION SELECT col2 FROM TABLE
1
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
17.02.2013, 19:02  [ТС]
jonni, тоесть вы предлагаете слияние делать с помощью самого SQL ?
Хорошо,попробуем.
0
119 / 119 / 25
Регистрация: 03.03.2010
Сообщений: 436
17.02.2013, 19:03
the_maksimka, именно, и заполнять через Fill Dataset, который ставить как datasource для грида
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
17.02.2013, 19:06
Цитата Сообщение от the_maksimka Посмотреть сообщение
На форуме находил с использованием adapter'а с методом Fill,но он добавляет данные так,как они хранятся в бд,с названиями колонок,как в бд. А мне надо,чтобы колонки я называл сам(но не это важно),плюс одно поле в datagridview получалось слиянием двух полей из бд(вот это важно).
Есть идеи?
Во-первых, названия берутся не те, которые в БД, а те, которые в запросе. Вам никто не мешает в запросе обозвать колонки так, как вам это надо, ровно как и слить два поля из БД.
Во-вторых, у каждой колонки в DataTable есть свойства Source (Название колонки в запросе), Caption (заголовок колонки) и Name (Название соответствующего объекта DataColumn), которые можно менять в независимости друг от друга. Плюс к этому, зголовок колонки можно поменять и в DataGridView.
Поэтому проблем с тем, чтобы назвать колонки так, как вам нужно, быть не должно, ибо способов сделать это, есть масса.
Цитата Сообщение от the_maksimka Посмотреть сообщение
так вот,после INSERT надо обновить данные...
Зачем? Не знаю, как именно вы эту новюу строку добавляете, но в общем случае (DataAdapter.Update(DataTable)), в DataTable создается строка такая же, как она будет в базе. Тогда какой смысл выбирать в DataTable данные заново, если в них ни чего не поменяется?

Добавлено через 1 минуту
Ух, а jonni то быстрей оказался)
0
119 / 119 / 25
Регистрация: 03.03.2010
Сообщений: 436
17.02.2013, 19:07
kodv, уверен что для Вас осталось еще много тем, где я не смогу подсказать
0
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
17.02.2013, 19:15  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
Зачем? Не знаю, как именно вы эту новюу строку добавляете, но в общем случае (DataAdapter.Update(DataTable)), в DataTable создается строка такая же, как она будет в базе. Тогда какой смысл выбирать в DataTable данные заново, если в них ни чего не поменяется?
Не совсем верно...у меня в коде прописан запрос на добавление данных в БД,и учитывая,как я его делал
C#
1
2
3
4
5
6
   OleDbConnection connection = new OleDbConnection(connectionString);
                string sql = "INSERT INTO napravlenie (code,type,forma) VALUES ('"+textBox1.Text+"','"+comboBox1.SelectedItem+"','"+textBox2.Text+"');";
                OleDbCommand command = new OleDbCommand(sql, connection);
                connection.Open();
                command.ExecuteNonQuery();
                connection.Close();
после добавления у меня ничего не происходило, и как обновить таблицу я не знал,поэтому пришлось дописать
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dataGridView1.Rows.Clear();
 
                OleDbConnection connection2 = new OleDbConnection(connectionString);
                string sql2 = "SELECT code,type,forma FROM napravlenie";
                OleDbCommand command2 = new OleDbCommand(sql2, connection2);
                connection2.Open();
                OleDbDataReader rdr = command2.ExecuteReader();
                if (connection2.State.ToString() == "Open")
                {
                    int i = 0;
                    while (rdr.Read())
                    {
                        dataGridView1.Rows.Add();
                        dataGridView1.Rows[i].Cells[0].Value = rdr[0].ToString() + "." + rdr[1].ToString();
                        dataGridView1.Rows[i].Cells[1].Value = rdr[2].ToString();
                        i++;
                    }
                    rdr.Close();
                    connection2.Close();
                }
что не является не то,что лучшим-оптимальным не является,т.к. при увеличивающемся числе записей в бд,увеличивается время повторного отображения...
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
17.02.2013, 19:41
the_maksimka, Я почему то подумал, что вы уже используете DataAdapter. Думаю, что для ваших целей он подходит гораздо лучше, чем DataReader, поэтому я бы вам посоветовал отказаться от использования DataReader'а в пользу DataAdapter'а.
1
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
18.02.2013, 21:45  [ТС]
C fill вроде разобрался,теперь как мне сделать,чтобы таблица обновлялась?

Добавлено через 6 минут
Вроде получилось,но 120 миллисекунд не сильно ли большая задержка?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
19.02.2013, 02:59
Цитата Сообщение от the_maksimka Посмотреть сообщение
Вроде получилось,но 120 миллисекунд не сильно ли большая задержка?
При каком действии?

Не по теме:

Что ж не спиться то вам в 2 часа ночи? :)

0
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
19.02.2013, 09:17  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
При каком действии?
Глобальная переменная:
C#
1
string sql = "SELECT (napravlenie.code & '.' & napravlenie.type) AS Специальность, (napravlenie.forma) AS Форма FROM napravlenie;";
сам код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
                System.Diagnostics.Stopwatch sec = new System.Diagnostics.Stopwatch();
                sec.Start();
 
                OleDbConnection connection = new OleDbConnection(connectionString);
                string sql2 = "INSERT INTO napravlenie (code,type,forma) VALUES ('"+textBox1.Text+"','"+comboBox1.SelectedItem+"','"+textBox2.Text+"');";
                OleDbCommand command = new OleDbCommand(sql2, connection);
                connection.Open();
                command.ExecuteNonQuery();
                connection.Close();
 
                OleDbConnection connection2 = new OleDbConnection(connectionString);
                connection2.Open();
                DataSet ds = new DataSet();
                ds.Clear();
                System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(sql, connection2);
                da.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0].DefaultView;
                connection2.Close();
 
                sec.Stop();
                this.Text = sec.ElapsedMilliseconds.ToString();
При выполнении этих действий получается такая задержка.

Не по теме:

Цитата Сообщение от kodv Посмотреть сообщение
Что ж не спиться то вам в 2 часа ночи?
Это начало моего диплома,поэтому хочу быстренько его сделать,и начать писать пояснительную записку

0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
19.02.2013, 11:21
the_maksimka, что касается самого кода:
- Зачем два раза создавать одно и то же подключение? Оно же одинаковое. Не вижу преград, чтобы второй использовать тот же самый объект подключения.
- Во втором случае строки, в которых вы открываете и закрываете подключение являеются лишним и бессмысленными, ибо метод Fill делает тоже самое, когда выполняется.
- С какой целью в начале делается INSERT в эту таблицу? Использование адаптера предполагает, что таблица выгружается в ее локальную копию (DataTable), именно в которой данные и изменяет пользователь, а при необходимости, данные сохраняются в базу с помощью метода DataAdapter.Update(DataTable).

Не по теме:

Рано что то вы дипломом озаботились. В мою бытность студентом в это время у нас самый разгар преддипломной практики был ...

0
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
19.02.2013, 15:37  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
- Зачем два раза создавать одно и то же подключение? Оно же одинаковое. Не вижу преград, чтобы второй использовать тот же самый объект подключения.
Точно...это уже я плохо подумал...исправлю.

Цитата Сообщение от kodv Посмотреть сообщение
- Во втором случае строки, в которых вы открываете и закрываете подключение являеются лишним и бессмысленными, ибо метод Fill делает тоже самое, когда выполняется.
т.е. для этого метода вообще не обязательно открывать подключение?

Цитата Сообщение от kodv Посмотреть сообщение
- С какой целью в начале делается INSERT в эту таблицу? Использование адаптера предполагает, что таблица выгружается в ее локальную копию (DataTable), именно в которой данные и изменяет пользователь, а при необходимости, данные сохраняются в базу с помощью метода DataAdapter.Update(DataTable).
Т.е.,как я понял,проще изменять данные в DataTable,а потом просто вызывать метод Update?

Не по теме:

К сожалению у нас в вузе, за год до моего поступления практически все специальности нашего факультета перевели на бакалавриат. Вот-осталось полгода...но в эти полгода и учёба,и курсовые и диплом...

0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
19.02.2013, 19:42
Цитата Сообщение от the_maksimka Посмотреть сообщение
т.е. для этого метода вообще не обязательно открывать подключение?
Я бы заменил слово "не обезательно", на слово "не нужно", подключение само открывается и закрывается внутри Fill.
Цитата Сообщение от the_maksimka Посмотреть сообщение
Т.е.,как я понял,проще изменять данные в DataTable,а потом просто вызывать метод Update?
Именно такой подход и подразумевает использование DataAdapter'а
1
2 / 2 / 2
Регистрация: 29.07.2012
Сообщений: 176
20.02.2013, 16:57  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
Именно такой подход и подразумевает использование DataAdapter'а
Я правильно понимаю,что можно изменить только данные в таблице и вызвать Update?
Или надо ещё что-то дописывать? И что именно надо передавать в update-созданный dataset или табличный datasource?

Добавлено через 17 минут
Только вот что-то у меня не получается

Добавлено через 1 час 33 минуты
Можно пример кода,как добавлять данные,учитывая,что таблицу я сделал только для чтения...
0
403 / 86 / 8
Регистрация: 16.02.2013
Сообщений: 356
21.02.2013, 07:49
Пример.

За кадром осталось связывание dataGridView с таблицей ds.state в дизайнере

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public partial class FormDicState : Form
    {
        public FormDicState()
        {
            InitializeComponent();
        }
 
        private void FormDicState_Load(object sender, EventArgs e)
        {
            this.stateTableAdapter.Fill(this.ds.state);
 
            ds.state.stateRowChanged += stateRowChanged;
            ds.state.stateRowDeleted += stateRowChanged;
 
        }
 
        void stateRowChanged(object sender, Ds.stateRowChangeEvent e)
        {
            this.stateTableAdapter.Update(this.ds.state);
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.02.2013, 07:49
Помогаю со студенческими работами здесь

Обновление данных в БД из dataGridView (DataSet)
Здравствуйте! Не так давно начал изучение c#, пишу простенькую программку для работы с БД. На форме есть dataGridView и кнопка для...

Обновление измененных данных из БД в DataGridView
Ув. форумчане!!! Передо мной такая проблема, я загружаю в ДатаГридВью серверную базу данных, все загрузилось замечательно, вот код public...

DataGridView обновление данных в таблице
Доброго времени суток. Я хотел в программе сделать чтобы все изменения сделанные в dgv сохранялись в таблице. Но как-то не получается....

Автоматическое обновление данных в DataGridView
Допустим у нас есть база данных Access, в которой есть таблица Table1. Мы подключаемся к базе и загружаем данные Table1 в...

Обновление данных в DataGridView по таймеру
Всем привет, подскажите как правильно сделать - у меня на форме создаются и заполняются гриды через функцию. Мне надо заставить их...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru