Как изменять/добавлять строки из datagrid в конркетную таблицу sql

В моем коде есть combobox с items представляющими собой названия таблиц, и какой item выберет пользователь, такая и откроется таблица.

Я хочу сделать редактирование/добавления выбранных пользователем строк в datagrid именно в той таблице, какую выбрал пользователь в combobox и передавал изменения в эту же самую таблицу sql.

Я знаю как это сделать для конкретной таблицы, в которой по binding перечитывать все значения и сохранять те которые изменил пользователь, а как это сделать с моими кучами таблиц по combobox я не знаю. Надеюсь вы мне поможете.

Вот код обновления по combobox:

public void UpdateDataGrid()
{
    dataBase.openConnetction();

    string selectedDatabase = "services"; // Строка по умолчанию

    switch (Combobox_Table.SelectedIndex)
    {
        case 0:
            selectedDatabase = "users";
            break;
        case 1:
            selectedDatabase = "employees";
            break;
        case 2:
            selectedDatabase = "services";
            break;
        case 3:
            selectedDatabase = "reviews";
            break;
    }

    string cmd = "SELECT * FROM " + selectedDatabase;

    MySqlCommand createCommand = new MySqlCommand(cmd, dataBase.getConnection());

    // Получение данных
    MySqlDataAdapter dataAdp = new MySqlDataAdapter(createCommand);
    DataTable dt = new DataTable();
    dataAdp.Fill(dt);

    // Установка источника данных для DataGrid
    phonesGrid.ItemsSource = dt.DefaultView;

    // Привязка столбцов в DataGrid
    phonesGrid.Columns.Clear(); // Очищаем существующие столбцы

    foreach (DataColumn column in dt.Columns)
    {
        DataGridTextColumn textColumn = new DataGridTextColumn()
        {
            Header = column.ColumnName,
            Binding = new Binding(column.ColumnName) // Привязка данных
        };
        phonesGrid.Columns.Add(textColumn); // Добавление нового столбца
    }

    dataBase.CloseConnetction();
    int rowCount = phonesGrid.Items.Count;
    Ammout_Chip.Content = rowCount - 1;
}

Вот вариант как сделать с одной базой данных по binding:

private void Save_Chip_Click(object sender, RoutedEventArgs e) // Также выполняет функцию создания новой строки
{
    try
    {
        // Получаем все строки из DataGrid
        DataView dateview = (DataView)phonesGrid.ItemsSource;

        // Получаем связанный с ним DataTable
        DataTable dt = dateview.Table;

        // Обновляем каждую строку
        foreach (DataRow row in dt.Rows)

        {
            string name = row["name_product"].ToString();
            int count = Convert.ToInt32(row["count_product"]);
            string company = row["company_product"].ToString();
            string price = row["price_product"].ToString();
            string type = row["type_product"].ToString();
            string country = row["country_product"].ToString();
            string supplier = row["supplier_product"].ToString();

            if ((string.IsNullOrEmpty(row["id"].ToString())))
            {
                dataBase.openConnetction();
                var addquary = $"insert into <имя выбранной таблицы> (name_product, count_product, company_product, price_product, type_product, supplier_product, country_product ) values ('{name}', '{count}', '{company}', '{price}', '{type}', '{supplier}', '{country}')";
                var commandadd = new MySqlCommand(addquary, dataBase.getConnection());
                commandadd.ExecuteNonQuery();
                MessageBox.Show("Запись успешно создана!", "Успех", MessageBoxButton.OK);
                UpdateDataGrid();
            }

            else
            {

                int id = Convert.ToInt32(row["id"]);
                string sqlUpdateQuery = "UPDATE <имя выбранной таблицы> SET name_product = @name, count_product = @count, company_product = @company, price_product = @price, type_product = @type, country_product = @country, supplier_product = @supplier WHERE id = @id";
                dataBase.openConnetction();
                MySqlCommand command = new MySqlCommand(sqlUpdateQuery, dataBase.getConnection());
                command.Parameters.AddWithValue("@name", name);
                command.Parameters.AddWithValue("@count", count);
                command.Parameters.AddWithValue("@company", company);
                command.Parameters.AddWithValue("@type", type);
                command.Parameters.AddWithValue("@price", price);
                command.Parameters.AddWithValue("@id", id);
                command.Parameters.AddWithValue("@country", country);
                command.Parameters.AddWithValue("@supplier", supplier);

                command.ExecuteNonQuery();
                dataBase.CloseConnetction();
                UpdateDataGrid();
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Ошибка! Еще раз проверьте значения в столбцах строки.", "Ошибка", MessageBoxButton.OK);
    }
}

Вот биндинги на всякий случай:

        <DataGrid FontSize="22"  AutoGenerateColumns="False" x:Name="phonesGrid" d:ItemsSource="{d:SampleData ItemCount=10}" Margin="22,114,624,257" Background="WhiteSmoke" Cursor="" Grid.RowSpan="2" >
            <DataGrid.Columns >
                <DataGridTextColumn Binding="{Binding id}" Header="" FontSize="22" Width="200" />
                <DataGridTextColumn Binding="{Binding one_bind}" Header="" FontSize="22" Width="200" />
                <DataGridTextColumn Binding="{Binding two_bind}" Header="" FontSize="22" Width="200"/>
                <DataGridTextColumn Binding="{Binding tree_bind}" Header="" FontSize="22" Width="200"/>
                <DataGridTextColumn Binding="{Binding four_bind}" Header='' IsReadOnly="True" FontSize="22" Width="200" />
            </DataGrid.Columns>
        </DataGrid>

Ответы (1 шт):

Автор решения: Елена Косова

Создайте для каждой таблицы в SQL свои запросы: Delete, Update, Insert...

При выборе таблицы в combobox считывайте название таблицы и передавайте в запрос (имя таблицы, Id строки, данные).

P.S. Для изменения таблицы я бы сделал форму, которая заполнялась данными по двойному клику по строке таблицы, считывал Id, менял значения, удалял, добавлял новые и вызывал запрос в БД. Обновлял грид из БД.

→ Ссылка