MySQL / C # Фиксирует изменения в DataGridView при редактировании ячейки?

#c# #mysql #datagridview

#c# #mysql #datagridview

Вопрос:

У меня есть форма с 5 представлениями DataGridView, и мне нужно иметь возможность сохранять изменения в представлениях при нажатии на ячейку, аналогично тому, как вы работали бы в Excel.

Вот информация о моем подключении:
public static MySqlConnection db = new MySqlConnection();
public string jobnumber = "";
public string str = "SERVER=192.168.1.149; DATABASE=starflitesystems; UID=iuapp; "
"Password=iuapp";

Моя форма открывает код:

 public frmPricingTemplate_Start(string s)
{
    InitializeComponent();

    createTempTable();

    setDGVQueries();

    hidePanels(pnlBasePackage);
    btnReset(btnBasePackage);

    this.WindowState                = FormWindowState.Maximized;

    jobnumber                       = s;
    txtJobNumber.Text               = s;
    comboBox1.Visible               = false;
    comboBox2.Visible               = false;
    dataGridRefresh();

    dg2.AutoSizeColumnsMode         = DataGridViewAutoSizeColumnsMode.Fill;
    dg3.AutoSizeColumnsMode         = DataGridViewAutoSizeColumnsMode.Fill;
    dg4.AutoSizeColumnsMode         = DataGridViewAutoSizeColumnsMode.Fill;
    dg5.AutoSizeColumnsMode         = DataGridViewAutoSizeColumnsMode.Fill;
}
  

Мои запросы к базе данных:

 public void setDGVQueries()
{
    /* Strings for dataGridViews */
    selectDGV1 = "SELECT `Group`, Material, `Sub-Material` "  
                                            "FROM temporary_table "  
                                            "WHERE tab='"   activeTab   "';";

    selectDGV2 = "SELECT Quantity as `Quantity`, Cost as `Cost` "  
                                            "FROM temporary_table "  
                                            "WHERE tab='"   activeTab   "';";

    selectDGV3 = "SELECT Quantity2 as `Quantity`, Cost2 as `Cost` "  
                                            "FROM temporary_table "  
                                            "WHERE tab='"   activeTab   "';";

    selectDGV4 = "SELECT Quantity3 as `Quantity`, Cost3 as `Cost` "  
                                            "FROM temporary_table "  
                                            "WHERE tab='"   activeTab   "';";

    selectDGV5 = "SELECT Quantity as `Quantity`, Cost as `Cost` "  
                                            "FROM temporary_table "  
                                            "WHERE tab='"   activeTab   "';";
}
  

Моя функция обновления базы данных:

 public void dataGridRefresh()
{
    /* Define all dataTables for the dataGridViews */
    MySqlDataAdapter return1 = new MySqlDataAdapter(selectDGV1, str);
    DataTable dt1 = new DataTable("base");
    return1.Fill(dt1);

    MySqlDataAdapter return2 = new MySqlDataAdapter(selectDGV2, str);
    DataTable dt2 = new DataTable("base");
    return2.Fill(dt2);

    MySqlDataAdapter return3 = new MySqlDataAdapter(selectDGV3, str);
    DataTable dt3 = new DataTable("base");
    return3.Fill(dt3);

    MySqlDataAdapter return4 = new MySqlDataAdapter(selectDGV4, str);
    DataTable dt4 = new DataTable("base");
    return4.Fill(dt4);

    MySqlDataAdapter return5 = new MySqlDataAdapter(selectDGV5, str);
    DataTable dt5 = new DataTable("base");
    return5.Fill(dt5);

    /* Set DataSources for all datagridViews */
    dg1.DataSource = dt1;
    dg2.DataSource = dt2;
    dg3.DataSource = dt3;
    dg4.DataSource = dt4;
    dg5.DataSource = dt5;
}
  

По сути, это загружает определенную информацию в мои DataGridViews, но теперь, после загрузки этих данных, мне нужно иметь возможность щелкнуть по ячейке, отредактировать ее и автоматически зафиксировать это изменение в таблице, как только фокус покинет ячейку.

Я просмотрел несколько материалов об этом в Интернете, но все они, похоже, использовали другой метод для подключения к БД, поэтому я не думаю, что они будут работать для меня.

Моя теория заключается в том, что мне нужно использовать `для каждой (строки r в dg1.Блок selectedRows){}, но я не уверен, что именно делать.

Любая помощь приветствуется.

Комментарии:

1. Поскольку вы выполняете запрос из той же таблицы temporary_table, почему бы вам не попробовать сделать все это в одном DataGridView?

2. Решение менеджера проекта, не мое. Но проблема не в этом. Я могу легко написать несколько строк, чтобы обновить другие DataGridViews. Проблема заключается в коде для обновления базовой таблицы, когда ячейка теряет фокус.

Ответ №1:

Вы можете использовать DataGridView.CellEnd редактирует событие, подобное этому:

 private void Form_Load(object sender, EventArgs e)
    { 
         myDataDridView.CellEndEdit  = new DataGridViewCellEventHandler(myDataDridView_CellEndEdit);
    }
  

и затем:

 private void myDataDridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
         try
         {
              // Your update query here
         }
         catch (Exception ex)
         {
              MessageBox.Show(ex.Message);
         }
    }
  

Комментарии:

1. Но каков запрос на обновление для этого? В этом весь мой вопрос. Я могу получить доступ к событиям нормально.