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

Обновление выделенной строки в dataGridView

08.05.2017, 19:27. Показов 3611. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста , разобраться. Таблица Access [наличие_товаров]. По нажатию на кнопку нужно обновить выделенную пользователем строку - число из переменной skol2_n попадает в поле [количество] . Но у меня получается , что число из skol2_n попадает во все строки таблицы в графу [количество], а мне нужно только чтобы в выделенную пользователем строку. Подозреваю, что я неправильно формирую условие WHERE.
C#
1
2
3
4
5
6
7
8
9
int row = dataGridView1.CurrentCell.RowIndex; // взяли строку с dataGridView1
            string skol_n = Convert.ToString(dataGridView1[5, row].Value);
            int kol_n = Convert.ToInt32(skol_n);
            int kol2 = kol_n - kol;
            string skol2_n = Convert.ToString(kol2);
 
 
            CommandText = "UPDATE  [наличие_товаров] SET [количество] ='" + skol2_n + "' WHERE ( ???????????   ='" + row + "')";
            Update(CommandText);
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 private void Update(string CommandText)  // читает все поля из таблицы "наличие товаров"
        {
 
            
            OleDbConnection conn = new OleDbConnection(ConnectionString);
           
            conn.Open();
            OleDbCommand Update = conn.CreateCommand();
            Update.CommandText = CommandText;
          
          
            Update.ExecuteNonQuery();
            conn.Close();
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.05.2017, 19:27
Ответы с готовыми решениями:

Копирование данных из выделенной строки DataGridView
Здравствуйте форумчане. Требуется ваша помощь. Имеется БД, в ней 2 таблицы: 1) RAB - в ней хранятся данные о всех работниках завода...

Получить данные выделенной строки DataGridView
Здравствуйте. На C# только начал писать, осваиваю помаленьку. Пишу приложение для взаимодействия с бд Access. Суть в том, что мне по...

Удаление выделенной строки в DataGridView через SQL-Запрос
Нужно, чтобы из БД удалялась выбранная строка. Этот код взял на форуме. Не работает. Подскажите, пожалуйста, что я делаю не так ...

12
62 / 62 / 53
Регистрация: 04.10.2013
Сообщений: 264
08.05.2017, 20:14
какие атрибуты у вас в таблице?
1
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 18
08.05.2017, 20:24  [ТС]
[ID_товара]-числовой (не счетчик!)
[наименование_товара]-текстовый
[модель]-текстовый
[фирма_производитель]-текстовый
[цена]-денежный
[количество] - числовой

C#
1
"UPDATE [наличие_товаров] SET [количество]='"+skol2_n+"' WHERE ([ID_товара]='"+Convert.ToString(dataGridView1[0, row].Value)+"')";
пробовала так - пишет Несоответствие типов данных в выражении условия отбора.
0
62 / 62 / 53
Регистрация: 04.10.2013
Сообщений: 264
08.05.2017, 20:37
когда здесь берете индекс из datagridview он точно совпадают с id товара в таблице access?
C#
1
int row = dataGridView1.CurrentCell.RowIndex;
Добавлено через 2 минуты
Цитата Сообщение от farmmedik Посмотреть сообщение
"UPDATE [наличие_товаров] SET [количество]='"+skol2_n+"' WHERE ([ID_товара]='"+Convert.ToString(dataGridView1[0, row].Value)+"')";
тут ошибка потому, что здесь в формате строки Convert.ToString(dataGridView1[0, row].Value)
а [ID_товара]-числовой (не счетчик!),
1
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 18
08.05.2017, 20:47  [ТС]
"UPDATE [наличие_товаров] SET [количество]='3' WHERE ([ID_товара]='87')"
вот такой результат запроса - все совпадает.
Но ошибка где-то есть .

Добавлено через 7 минут
я убрала Convert.ToString - то же самое
0
62 / 62 / 53
Регистрация: 04.10.2013
Сообщений: 264
08.05.2017, 20:59
C#
1
"UPDATE [наличие_товаров] SET [количество]='"+skol2_n+"' WHERE [ID_товара]= " + int.Parse(dataGridView1[0, row].Value);
1
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 18
08.05.2017, 21:11  [ТС]
Ошибка синтаксиса (пропущен оператор) в выражении запроса '[ID_товара]= int.Parse(dataGridView1[0, row].Value)'.
0
62 / 62 / 53
Регистрация: 04.10.2013
Сообщений: 264
08.05.2017, 21:17
скорее всего из-за пробела в
"where [ID_товавра]= "
...............................|....
из-за него
1
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 18
08.05.2017, 21:29  [ТС]
нет, тут дело не в этом - запрос теперь не возвращает ID_товара. Да и во всей программе в таблицу вставляются и достаются оттуда именно строковые данные. Поэтому здесь Convert.ToString срабатывает правильно. Причина какая-то другая.
0
62 / 62 / 53
Регистрация: 04.10.2013
Сообщений: 264
08.05.2017, 21:36
а можно проект с бд сюда прикрепить?
1
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 18
08.05.2017, 21:50  [ТС]
а как проект прикрепить? Через загрузку файлов не получается - пишет некорректный файл.

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
 public partial class Form11 : Form
    {
        int kol;
        string CommandText;
        string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\admin\\Documents\\Visual Studio 2013\\Projects\\WFA3\\WFA3\\BD_Curs2.accdb";
        public Form11()
        {
            InitializeComponent();
        }
 
        private void Form11_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'bD_Curs2DataSet10.покупатели' table. You can move, or remove it, as needed.
            this.покупателиTableAdapter2.Fill(this.bD_Curs2DataSet10.покупатели);
            // TODO: This line of code loads data into the 'bD_Curs2DataSet9.покупатели' table. You can move, or remove it, as needed.
            this.покупателиTableAdapter1.Fill(this.bD_Curs2DataSet9.покупатели);
            // TODO: This line of code loads data into the 'bD_Curs2DataSet8.покупатели' table. You can move, or remove it, as needed.
            this.покупателиTableAdapter.Fill(this.bD_Curs2DataSet8.покупатели);
            Get_T();
        }
 
        private void Get_T()  // читает все поля из таблицы "наличие товаров"
        {
 
            CommandText =
                  "SELECT *  FROM [наличие_товаров] ";
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CommandText, ConnectionString);
            DataSet ds = new DataSet();  // создаем объект DataSet
            dataAdapter.Fill(ds, "[наличие_товаров]");
            dataGridView1.DataSource = ds.Tables["[наличие_товаров]"].DefaultView;
            
        }
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
 public void button3_Click(object sender, EventArgs e)
        {
            int row = dataGridView1.CurrentCell.RowIndex; // взяли строку с dataGridView1
            string skol_n = Convert.ToString(dataGridView1[5, row].Value);
            int kol_n = Convert.ToInt32(skol_n);
            int kol2 = kol_n - kol;
            string skol2_n = Convert.ToString(kol2);
            string i = Convert.ToString(dataGridView1.CurrentRow.Cells[0]);
            CommandText = "UPDATE [наличие_товаров] SET [количество]='" + skol2_n + "' WHERE [ID_товара]='"+i+"'";
        /*   CommandText = "UPDATE [наличие_товаров] SET [количество]='" + skol2_n + "'"+
         " WHERE ([ID_товара]='"+ Convert.ToString(dataGridView1[0,row].Value)+"')";*/
 
         //  CommandText = "UPDATE [наличие_товаров] SET [количество]='" + skol2_n + "' WHERE [ID_товара]='+int.Parse(dataGridView1[0,row].Value)+'" ;
            //Update(CommandText);
           My_Execute_Non_Query(CommandText);
            Get_T();
        }
 
       public void Update(string CommandText)  // читает все поля из таблицы "наличие товаров"
        {
 
            
            OleDbConnection conn1 = new OleDbConnection(ConnectionString);
           // CommandText = "Update Tovar set NAME = ?, PRICE = ?, TYPE = ?, DESCRIPTION = ?, SALE = ?, BUYER = ?, RESPONCE = ? where PK = ?";
            conn1.Open();
            OleDbCommand Update = conn1.CreateCommand();
            Update.CommandText = CommandText;
           //Update.Parameters.Add("P_NAME", OleDbType.VarChar, 50, "NAME").Value = "Значение";
          
            Update.ExecuteNonQuery();
            conn1.Close();
        }
 
 
        public void My_Execute_Non_Query(string CommandText)
        {
            OleDbConnection conn = new OleDbConnection(ConnectionString);
            conn.Open();
            OleDbCommand myCommand = conn.CreateCommand();
            myCommand.CommandText = CommandText;
            myCommand.ExecuteNonQuery();
            conn.Close();
        }
    }
вот куски кода, касающиеся данного момента
0
62 / 62 / 53
Регистрация: 04.10.2013
Сообщений: 264
08.05.2017, 22:22
Лучший ответ Сообщение было отмечено farmmedik как решение

Решение

нужно в .rar формате кидать

Добавлено через 7 минут
WHERE [ID_товара]='"+i+"'";
апострофы не нужны, тут же целочисленное значение

Добавлено через 1 минуту
она в access потом, как символьное значение будет, не 1, а '1' и это уже не int
1
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 18
09.05.2017, 14:32  [ТС]
спасибо! Вы мне очень помогли! Получилось так :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int row = dataGridView1.CurrentCell.RowIndex; // взяли строку с dataGridView1
            string skol_n = Convert.ToString(dataGridView1[5, row].Value);
            int kol_n = Convert.ToInt32(skol_n);
            int kol2 = kol_n - kol;
            string skol2_n = Convert.ToString(kol2);
          
            string d = Convert.ToString(dataGridView1[0, row].Value);
            int i = Int32.Parse(d);
            CommandText = "UPDATE [наличие_товаров] SET [количество]='" + skol2_n + "' WHERE [ID_товара]= " + i + "";
       
 
         
            Update(CommandText);
          
            Get_T();
        }
как-то слишком много строк получилось , потом может оптимизирую код , а пока главное - все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.05.2017, 14:32
Помогаю со студенческими работами здесь

Передача данных из выделенной строки datagridview в текстбоксы другой формы
Здравствуйте! Мне необходимо передать данные в текстбоксы. Код данной кнопки работает, если не передавать числовое значение в textbox1. Я...

Обновление одной строки datagridview, а не всего DataSource
Товарищи, дайте совет. Есть база данных SQL и datagridview, который заполняю хорошо известным способом SqlConnection con = new...

DataGridView. Редактирование выделенной строки.
Подскажите как можно редактировать выделенную строку в datagridview? Желательно открыть форму и заполнить textBox-ы данными с колонок

Обрамление выделенной строки в DataGridView
Добрый день! Разбираюсь с функциями графики потихоньку. Имеем DGV со свойством SelectionMode = FullRowSelect и мне хотелось бы, чтобы...

Удаление выделенной строки в datagridview
Всем привет!!! Подскажите, какой нужно написать код на кнопку. зы событие mouseDown для сетки не подходит, так как удаляет строку...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru