Взаимодействие с 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 шт):

Автор решения: Alexander Petrov

Итак, в 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; Тогда пользователь не сможет по ошибке изменить их.

→ Ссылка