Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для mygedz
1 / 1 / 1
Регистрация: 07.07.2019
Сообщений: 43

Как удалить строку из dataGridView (SQLite)

12.04.2023, 18:21. Показов 537. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Пишу приложение в учебных целях WinForm + SQLite.

Работает создание БД, добавление в БД и работает удаление строки из БД, но коряво.

Вот код формы:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
using System;
using System.Data;
using System.Data.SQLite;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
 
namespace ListDB
{
    public partial class Form1 : Form
    {
        private string dbFileName;
        private SQLiteConnection m_dbConn;
        private SQLiteCommand m_sqlCmd;
        
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Add_button_Click(object sender, EventArgs e)
        {
            if (m_dbConn.State != ConnectionState.Open)
            {
                MessageBox.Show("Open connection with database");
                return;
            }
 
            addForm addData = new addForm();
            if (addData.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    m_sqlCmd.CommandText = "INSERT INTO ListDB ('today_date', 'name_tit', 'date_appearance', 'storage_location', 'size_files', 'amount_files', 'status', 'list_date') values ('" +
                        addData.today_date + "' , '" +
                        addData.name_tit + "' , '" +
                        addData.date_appearance + "' , '" +
                        addData.storage_location + "' , '" +
                        addData.size_files + "' , '" +
                        addData.amount_files + "' , '" +
                        addData.status + "' , '" +
                        addData.list_date + "')";
                    m_sqlCmd.ExecuteNonQuery();
                }
                catch (SQLiteException ex)
                {
                    MessageBox.Show("Error: " + ex.Message);
                }
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            m_dbConn = new SQLiteConnection();
            m_sqlCmd = new SQLiteCommand();
 
            dbFileName = "ListDB(NO_DELETE).sqlite";
        }
 
        private void CreateNewBD_MenuItem_Click(object sender, EventArgs e)
        {
            if (!File.Exists(dbFileName))
                SQLiteConnection.CreateFile(dbFileName);
 
            try
            {
                m_dbConn = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;");
                m_dbConn.Open();
                m_sqlCmd.Connection = m_dbConn;
 
                m_sqlCmd.CommandText = "CREATE TABLE IF NOT EXISTS ListDB (id INTEGER PRIMARY KEY AUTOINCREMENT, today_date TEXT, name_tit TEXT, date_appearance TEXT, storage_location TEXT, size_files TEXT, amount_files TEXT, status TEXT, list_date TEXT)";
                m_sqlCmd.ExecuteNonQuery();
            }
            catch (SQLiteException ex)
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }
 
        private void Timer1_Tick(object sender, EventArgs e)
        {
            Data_StatusLabel.Text = DateTime.Today.ToLongDateString();
        }
 
        private void About_MenuItem_Click(object sender, EventArgs e)
        {
            Form ifrm = new AboutForm();
            ifrm.ShowDialog();
        }
 
        
        private void Conn_button_Click(object sender, EventArgs e)
        {
            DataTable dTable = new DataTable();
            string sqlQuery;
 
            m_dbConn = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;");
            m_dbConn.Open();
            m_sqlCmd.Connection = m_dbConn;
 
            if (m_dbConn.State != ConnectionState.Open)
            {
                MessageBox.Show("Open connection with database");
                return;
            }
 
            try
            {
                sqlQuery = "SELECT * FROM ListDB";
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(sqlQuery, m_dbConn);
                adapter.Fill(dTable);
 
                if (dTable.Rows.Count > 0)
                {
                    dataGridView.Rows.Clear();
 
                    for (int i = 0; i < dTable.Rows.Count; i++)
                        dataGridView.Rows.Add(dTable.Rows[i].ItemArray);
                }
 
                else
                    MessageBox.Show("База данных пуста");
            }
            catch (SQLiteException ex)
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }
    
        private void Del_button_Click(object sender, EventArgs e)
        {
            if (dataGridView.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Вы действительно хотите удалить запись? Это действие нельзя будет отменить", "Удаление записи", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    string id = dataGridView.SelectedRows[0].Cells[0].Value.ToString();
                    SQLiteCommand cmd = new SQLiteCommand(@"DELETE FROM ListDB WHERE id = @id", m_dbConn);
                    cmd.Parameters.AddWithValue("id", id);
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Запись была успешно удалена из базы данных", "Удаление записи", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }       
 
        private void Edit_button_Click(object sender, EventArgs e)
        {            
 
        }
    }
}
Код формы добавления данных в БД:
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
using System;
using System.Windows.Forms;
 
namespace ListDB
{
    public partial class addForm : Form
    {
        public string today_date { get; set; }
        public string name_tit { get; set; }
        public string date_appearance { get; set; }
        public string storage_location { get; set; }
        public string size_files { get; set; }
        public string amount_files { get; set; }
        public string list_date { get; set; }
        public string status { get; set; }
 
        public addForm()
        {
            InitializeComponent();
        }
 
        private void Add_button_Click(object sender, EventArgs e)
        {
            today_date = dateTimePicker1.Text;
            name_tit = Name_Tit_textBox.Text;
            date_appearance = dateTimePicker2.Text;
            storage_location = storage_location_comboBox.Text;
            size_files = size_textBox.Text;
            amount_files = amount_files_textBox.Text;
            list_date = list_date_textBox.Text;
            status = status_comboBox.Text;
 
            DialogResult = DialogResult.OK;
        }
    }
}
Удаляю я так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void Del_button_Click(object sender, EventArgs e)
        {
            if (dataGridView.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Вы действительно хотите удалить запись? Это действие нельзя будет отменить", "Удаление записи", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    string id = dataGridView.SelectedRows[0].Cells[0].Value.ToString();
                    SQLiteCommand cmd = new SQLiteCommand(@"DELETE FROM ListDB WHERE id = @id", m_dbConn);
                    cmd.Parameters.AddWithValue("id", id);
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Запись была успешно удалена из базы данных", "Удаление записи", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }
Инфа из БД удаляется. НО возникает проблема в нумерации списка данных.
Допустим есть у меня 5 строк.
1
2
3
4
5
Удаляю я 3.
В итоге dataGridView будет отображаться:
1
2
4
5
Как сделать, чтоб после удаления обновлялся список. Помогите пожалуйста. Желательно готовой реализацией, а то у меня уж дым идет)))

В самой базе я колонку ID использую как номер порядковый... Походу тут я накосячил. Нужна отдельная колонка под нумерацию, которая будет обновляться, после удаления.
И еще пишут, что такой способ удаления не правильный.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.04.2023, 18:21
Ответы с готовыми решениями:

Как удалить и изменить данные в базе sqlite через DataGridView (Windows Forms)?
Проблема в следующем: пишу на visual studio 2015, создаю базу sqlite через &quot;Server Explorer -- Data connections -- Add connection&quot; по...

Python sqlite - как удалить строку по условию
База mydatabase таблица typs столбец typs(он один) conn = sqlite3.connect('mydatabase.db') cur = conn.cursor() ...

Как удалить строку из dataGridView и БД
Добрый вечер! Изначально у меня было удаление строки по вводимому в текстбокс кода. Решил попробовать переделать так, чтобы строка...

5
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
12.04.2023, 18:25
Цитата Сообщение от mygedz Посмотреть сообщение
Как сделать, чтоб после удаления обновлялся список
Никак, на то он и уникальный ключ.

Добавлено через 1 минуту
Если хотите отобразить независимую нумерацию, используйте ROWID в запросе
0
 Аватар для mygedz
1 / 1 / 1
Регистрация: 07.07.2019
Сообщений: 43
12.04.2023, 18:29  [ТС]
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Никак, на то он и уникальный ключ.
Да повторюсь, в самой базе я колонку ID использую как номер порядковый... Походу тут я накосячил. Нужна отдельная колонка под нумерацию, которая будет обновляться, после удаления.
Правильно я мыслю? Или опять не в ту сторону)?

Добавлено через 2 минуты
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Если хотите отобразить независимую нумерацию, используйте ROWID в запросе
А колонку с порядковым номером в БД с выводом в dataGridView, тоже надо делать?
А колонку ID скрыть из dataGridView?
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
12.04.2023, 18:34
Цитата Сообщение от mygedz Посмотреть сообщение
ID использую как номер порядковый
Это не так, данная колонка должны быть уникальной, чтобы в случае удаление информации из таблицы, ключи не могли иметь одинаковое значение.

Цитата Сообщение от mygedz Посмотреть сообщение
А колонку с порядковым номером в БД с выводом в dataGridView, тоже надо делать?
Нет, это встроенная функция
SQL
1
SELECT ROWID, * FROM Название таблицы
все столбцы или явное перечисление

SQL
1
SELECT ROWID,  Col1, Col2 и.т.д FROM Название таблицы
0
 Аватар для mygedz
1 / 1 / 1
Регистрация: 07.07.2019
Сообщений: 43
12.04.2023, 18:45  [ТС]
Я походу окончательно запутался.
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Нет, это встроенная функция
Строку запроса на подключение в БД я понял:
C#
1
sqlQuery = "SELECT ROWID, * FROM ListDB";
Но вывод в dataGridView, делается в определенный столбец, где будут просто порядковые номера. Извиняюсь за тупость...((

Вот как у меня столбцы в dataGridView прописаны:
Миниатюры
Как удалить строку из dataGridView (SQLite)  
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
12.04.2023, 18:47
Цитата Сообщение от mygedz Посмотреть сообщение
Вот как у меня столбцы в dataGridView прописаны:
Понятно. Ну значит добавляйте что могу сказать. А так то лучше работать без явной привязки столбцов. Ну это уже другой вопрос.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.04.2023, 18:47
Помогаю со студенческими работами здесь

как удалить строку из datagridview
как удалить строку из datagridview? у меня считывается из текстового файла инфа которой я заполняю таблицу datagridview, мне надо чтобы...

DataGridView как удалить строку вручную?
Добрый день. Недавно в C#. Подскажите, пожалуйста, чего-то не могу сообразить. Есть на форме DataGridView, AllowUserToDeleteRows ==...

Как удалить выбранную строку из datagridview и бд
Помогите разобраться с кодом private void buttondelete_Click(object sender, EventArgs e) { if...

Как удалить строку из dataGridView и базы данных?
dataGridView c# и sql таблицы связаны, как можно удалить строку и там, и там одной кнопкой?

Как удалить строку из БД Access через DataGridView?
Добрый день! Подскажите как реализовать удаление строки из бд через datagridview. из самой datagridview удалить строку получается, а вот из...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru