Как получить id выделенной строки в DataGridView на C#?
Салют! Стоит задача удалить по нажатию кнопки запись (SQLite), которая в данный момент выделена пользователем в гриде. Вопрос: как это можно грамотно сделать?
В данный момент у меня это выглядит так:
if (MessageBox.Show("Удалить запись? ", "Удаление записи", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
conn.Open();
SQLiteCommand cmd = new SQLiteCommand(@"DELETE FROM Treadmill WHERE name = @name", conn);
cmd.Parameters.AddWithValue("name", dataGridView.CurrentRow.Cells[0].Value);
cmd.ExecuteNonQuery();
conn.Close();
MessageBox.Show("Запись удалена", "Удаление записи", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Сейчас это работает по полю name и удаляет только самую верхнюю строку в гриде. Можно ли как-нибудь получить номер выделенной строки в гриде, сравнивать его с полем id в базе и по нему удалить запись?
Спасибо за подробный ответ :)
P.S. Как грид заполняется данными. Код:
conn.Open(); // Открыть соединение
// Заполнение таблицы
SQLiteDataAdapter Adapter = new SQLiteDataAdapter(select_treadmill, conn);
DataSet ds = new System.Data.DataSet();
Adapter.Fill(ds, "Table");
dataGridView.DataSource = ds.Tables["Table"].DefaultView;
// Заполнение шапки таблицы
dataGridView.Columns[0].Visible = false;
dataGridView.Columns[1].HeaderText = "Назввание";
dataGridView.Columns[2].HeaderText = "Дата";
dataGridView.Columns[3].HeaderText = "Время, мин";
dataGridView.Columns[4].HeaderText = "Скорость, км/ч";
dataGridView.Columns[5].HeaderText = "Дистанция, км";
dataGridView.Columns[6].HeaderText = "Калории, ккал";
dataGridView.Columns[7].HeaderText = "Пульс, уд/мин";
conn.Close(); // Закрыть соединение
Запрос:
string select_treadmill = "SELECT id, name, date, timer, speed, distance, calories, pulse FROM Treadmill";
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Можно так
int index = dataGridView.CurrentCell.RowIndex;
Или так
int index = dataGridView.SelectedRows[0].Index;
Разобрались с кодом, получилось следующее решение:
1) изменить запрос, чтобы приехал ключ id
const string select_treadmill = "SELECT * FROM Treadmill";
2) спрятать первую колонку
dataGridView.Columns[0].Visible = false;
3) удалять элемент по id, находящемуся в первой колонке
private void deleteRecBtn_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();
conn.Open();
SQLiteCommand cmd = new SQLiteCommand(@"DELETE FROM Treadmill WHERE id = @id", conn);
cmd.Parameters.AddWithValue("id", id);
cmd.ExecuteNonQuery();
conn.Close();
MessageBox.Show("Запись была успешно удалена из базы данных", "Удаление записи", MessageBoxButtons.OK, MessageBoxIcon.Information);
FillingGrid();
}
}
}