#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. Но каков запрос на обновление для этого? В этом весь мой вопрос. Я могу получить доступ к событиям нормально.