Взаимодействие с datagridview
Всем привет, пишу свою программу и возник такой вопрос. У меня есть Datagridview которая заполняется при нажатии на элемент меню названиями таблиц с помощью Sql запроса из базы данных вот код:
private void Material_10x11ToolStripMenuItem_Click(object sender, EventArgs e)
{
SqlConnection SQLconnectionAccount = new SqlConnection(ConfigurationManager.ConnectionStrings["MPM.Properties.Settings.AccountConnectionString"].ConnectionString);
SQLconnectionAccount.Open();
var AccountView = new SqlDataAdapter($"SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME LIKE '%Material_10x11%'", SQLconnectionAccount);
var dtbl = new DataTable();
AccountView.Fill(dtbl);
dataGridView.DataSource = dtbl;
SQLconnectionAccount.Close();
}
Как сделать так, чтобы при нажатии на имя таблицы она открывалась в DatagridView вместо имен таблиц, заранее извиняюсь за возможно глупый вопрос, всем спасибо!
Ответы (1 шт):
Итак, в dataGridView
у вас находятся имена таблиц. И вы хотите показать их содержимое.
Подписываем грид на событие CellClick
(или любое другое подходящее).
private void DataGridView_CellClick(object? sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0 && e.RowIndex < dataGridView.RowCount - 1)
{
var cell = dataGridView[e.ColumnIndex, e.RowIndex];
var tableName = cell.Value.ToString();
string sql = $"SELECT * FROM [{tableName}]";
var adapter = new SqlDataAdapter(sql, _connectionString);
var data = new DataTable();
adapter.Fill(data);
dataGridView2.DataSource = data;
}
}
В обработчике события извлекаем имя таблицы, которое было выбрано. Формируем sql-запрос. Дальше вы уже умеете заполнять DataTable.
Адаптер сам может создать, открыть и закрыть соединение. Достаточно передать в него строку соединения.
Тут важно не допустить попадания в sql-запрос невалидных имён таблиц. Поэтому я бы порекомендовал сделать первый датагрид только для чтения: dataGridView.ReadOnly = true;
Тогда пользователь не сможет по ошибке изменить их.