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

Редактирование datagridview и БД

25.11.2015, 15:52. Показов 9686. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста как редактировать строку в dgv и БД через TextBox'ы, ломаю голову ниче не получается.
Заношу данные в dataGridView:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
OleDbCommand command = new OleDbCommand();
            OleDbConnection connection;
            connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.15.0;Data Source=" + Path.GetDirectoryName(Application.ExecutablePath) + "/movieRentDataBase.accdb;Persist Security Info=False");
            OleDbDataAdapter adap = new OleDbDataAdapter();
            DataTable dt = new DataTable();
            DataSet ds = new DataSet();
            command.Connection = connection;
            command.CommandText = "SELECT * from TFilms";
            connection.Open();
            adap.SelectCommand = command;
            adap.Fill(ds);
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            connection.Close();
Создаю событие для переноса данных из datagridview в TextBox'ы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
 private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            
            txtTitle2.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
            txtGenre2.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
            txtCountry2.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
            txtProducer2.Text = dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString();
            txtYear2.Text = dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString();
            txtInfoRent2.Text = dataGridView1.Rows[e.RowIndex].Cells[6].Value.ToString();
            txtInRent2.Text = dataGridView1.Rows[e.RowIndex].Cells[7].Value.ToString();
            txtOverRent2.Text = dataGridView1.Rows[e.RowIndex].Cells[8].Value.ToString();
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2015, 15:52
Ответы с готовыми решениями:

Редактирование подключенной БД к DataGridView
Такой вопрос...я кинул на форму DataGridView....связал с небольшой базой данных Access....как теперь программно редактировать эту БД??...

Редактирование информации в БД и dataGridView
Подскажите пожалуйста где ошибка, серьезно не понимаю private void button2_Click(object sender, EventArgs e) { ...

Редактирование таблицы из БД в DataGridView
Собственно, хочу сделать доступ к редактированию таблиц базы данных просто как в экселе например. и у меня не получается. Вот код моей...

13
Заблокирован
25.11.2015, 17:01
Затем в этих textBox-ах вводите нужные данные и по нажатию например кнопки обновить, вы должны сделать запрос на update узнав ID записи, которая была передана в textBox-ы
0
0 / 0 / 0
Регистрация: 25.09.2015
Сообщений: 23
25.11.2015, 18:16  [ТС]
Хозяин, а каким образом можно узнать ID?
0
 Аватар для Adadjio
61 / 61 / 32
Регистрация: 30.07.2013
Сообщений: 178
25.11.2015, 18:22
planetue, зачем вы создаете неиспользуемый экземпляр DataTable?
C#
1
DataTable dt = new DataTable();
лучше уж сделайте так:
C#
1
dataGridView1.DataSource = ds.Tables[0];
Запрос на обновление будет вида :
SQL
1
UPDATE TFilms SET FIELD1 = param1, FIELD2=param2, .... WHERE FIELDID = recordID
где TFilms - ваша БД, FIELD1, FIELD2 ... - поля таблицы, FIELDID - поле таблицы с уникальным ключом,
recordID - id выбранной в DataGridView записи, param1 ... - остальные переменные из ваших TextBox-ов
0
0 / 0 / 0
Регистрация: 25.09.2015
Сообщений: 23
27.11.2015, 12:35  [ТС]
Пробую сделать удаление из таблицы, но удаляет последнюю запись в таблицу, как сделать что бы удаляло выделенную строку в 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
 public void getID(Film f)
        {
            try
            {
                command.CommandText = "SELECT * FROM TFilms";
                command.CommandType = System.Data.CommandType.Text;
                connection.Open();
                OleDbDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    f.ID = Convert.ToInt32(reader["ID"].ToString());
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally 
            {
               if(connection != null)
               {
                   connection.Close();
               }
            }
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void Delete(Film f)
        {
            try
            {
                command.CommandText = "DELETE FROM TFilms WHERE ID= " + f.ID;
                command.CommandType = System.Data.CommandType.Text;
                connection.Open();
 
                command.ExecuteNonQuery();
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (connection != null)
                {
                    connection.Close();
                }
            }
        }
C#
1
2
3
4
5
6
private void btnDelete_Click(object sender, EventArgs e)
        {
            Film f = new Film();
            c.getID(f);
            c.Delete(f);
        }
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,136
Записей в блоге: 1
27.11.2015, 12:59
planetue, у вас reader в getID возвращает вообще все фильмы. и вы ID первой записи присваиваете

C#
1
f.ID = Convert.ToInt32(reader["ID"].ToString());  //можно было и без преобразования в string использовать метод GetInt32
а вам нужно получить ID из выбранной строки грида.


точнее говоря reader проходится по всем записям, в итоге f.ID у вас получает значение последней записи
1
0 / 0 / 0
Регистрация: 25.09.2015
Сообщений: 23
27.11.2015, 13:28  [ТС]
NewOrdered, ошибку понял, только немогу понять, как это исправить и получить Id выбранной строки, подскажите пжлст?
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,136
Записей в блоге: 1
27.11.2015, 14:45
Лучший ответ Сообщение было отмечено planetue как решение

Решение

planetue, можно попробовать взять его из грида. Подписаться на событие .CellClick, а в обработчике соответственно добавить что-то типа

C#
1
2
3
4
5
6
7
8
9
int selectedFilmId = -1;
 
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0)
    selectedFilmId = dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue;
    else
    selectedFilmId = -1;
}
Добавлено через 1 минуту
тогда метод getID вам в принципе не нужен

Добавлено через 2 минуты
и доработать метод Delete()

C#
1
2
command.CommandText = "DELETE FROM TFilms WHERE ID = @ID";
command.Parameters.Add(new SqlParameter("ID", f.ID));
Добавлено через 3 минуты
Для удобства гриду можно задать свойства
C#
1
dataGridView1.Multiselect = false;
и
C#
1
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
1
0 / 0 / 0
Регистрация: 25.09.2015
Сообщений: 23
27.11.2015, 15:05  [ТС]
NewOrdered, неявное преобразование типа object в int невозможно.
C#
1
selectedFilmId = dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue;
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,136
Записей в блоге: 1
27.11.2015, 15:11
Лучший ответ Сообщение было отмечено planetue как решение

Решение

Цитата Сообщение от planetue Посмотреть сообщение
NewOrdered, неявное преобразование типа object в int невозможно
пардон, писал по памяти.
приведите явно
C#
1
selectedFilmId = (int)dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue;
1
0 / 0 / 0
Регистрация: 25.09.2015
Сообщений: 23
27.11.2015, 16:02  [ТС]
NewOrdered, теперь при щелчке на строку в dgv выкидывает с "Заданное приведение является недопустимым"
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,136
Записей в блоге: 1
27.11.2015, 16:04
Лучший ответ Сообщение было отмечено planetue как решение

Решение

C#
1
selectedFilmId = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue.ToString());
1
0 / 0 / 0
Регистрация: 25.09.2015
Сообщений: 23
27.11.2015, 19:18  [ТС]
NewOrdered, Всё круто, большое спасибо!

Добавлено через 2 часа 58 минут
NewOrdered, Eсли можно подскажите пжлст еще в одном вопросе, у меня в dvg одна последняя строка всегда пустая, когда я выделяю её выкидывает ошибку: "Входная строка имела неверный формат". Пробовал пофиксить таким способом - не получилось.
C#
1
2
3
4
5
6
7
8
9
10
11
 for (int i = 0; i < dataGridView1.RowCount - 1; i++)
            {
                if (dataGridView1.Rows[i].Cells[8].Value.ToString() == null)
                {
                    selectedFilmID = -1;
                }
                else
                {
                     selectedFilmID = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue.ToString());
                }
            }
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,136
Записей в блоге: 1
27.11.2015, 21:10
Цитата Сообщение от planetue Посмотреть сообщение
C#
1
if (dataGridView1.Rows[i].Cells[8].Value.ToString() == null)
во-первых, не привязывайтесь к конкретному индексу, т.к. записей может быть как больше так и меньше.
во-вторых, цикл при определении ID совершенно не нужен
в-третьих, можно просто проверить ячейку на null или пустую строку

C#
1
2
3
4
5
6
7
8
9
int selectedFilmId = -1;
 
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0 && !string.IsNullOrEmpty(dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue.ToString()))
    selectedFilmId = dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue;
    else
    selectedFilmId = -1;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2015, 21:10
Помогаю со студенческими работами здесь

Редактирование mysql бд в datagridview
Есть база данных в mysql.Выодится одна из таблиц в datagridview.Как сделать так что изменения в datagridview отражались на базе данных?

редактирование значений в dataGridView
у меня есть колонка1 в dataGridViewcj со значениями м1, м2...м10. Мне надо вместо м1 подставить г Москва, вместо м2 г Санкт-Петербург и т д...

Удаление, редактирование БД dataGridView
1.Хочу удалять из главной таблицы БД строку и чтобы из других таблиц тоже удалялась строка. БД находятся на другой форме. Из главной удаляю...

Редактирование DataGridView через TextBox
Очень нуждаюсь в помощи. Из-за моих скудных знаний встала вся работа. В общем, есть 2 формы. На форме 1 DataGridView. По двойному...

Редактирование DataGridview через textbox
Есть таблица в которую через текстбоксы нужно добавить данные. Как сделать, чтобы при добавление Код оборудование автоматически ставил...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru