如何在更改 dataGridView 中的单元格值后更新数据源中的更改?
How to update changes in the data source after changing the cell value in the dataGridView?
用户对单元格进行了更改。
CellEndEdit
事件被触发。
在 Save ()
方法中,更改显示在 adapter.Update (table_2);
行中。
数据库中未显示更改(更改未保存到数据库)。
如果用户使用按钮调用Save ()
方法,则更改显示在数据库中(在数据源tabledataGridView
)。
问题。
如何在更改 dataGridView 中的单元格值后更新数据源中的更改?
我的代码
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
i++;
Save();
richTextBox1.Text += i + " Event - `CellEndEdit` \r\n";
}
public DataTable CreateCmds()
{
table_2 = new DataTable();
try
{
string connectionString = @"Data Source=.\SQLEXPRESS1;Initial Catalog=Prb;Integrated Security=True";
string queryString = "SELECT * FROM tbl_01_Groups";
using (SqlConnection connection = new SqlConnection(connectionString))
{
adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(queryString, connection);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
connection.Open();
adapter.Fill(table_2);
}
}
catch (Exception ex)
{
string s = ex.Message;
string t = ex.StackTrace;
// throw;
}
return table_2;
}
public void Save()
{
string connectionString = @"Data Source=.\SQLEXPRESS1;Initial Catalog=Prb;Integrated Security=True";
string queryString = "SELECT * FROM tbl_01_Groups";
using (SqlConnection connection = new SqlConnection(connectionString))
{
adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(queryString, connection);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
connection.Open();
adapter.Update(table_2);
}
}
Update_1
当我使用 CellValueChanged
事件时,也会发生同样的事情。
CellValueChanged
事件被触发。
在 Save ()
方法中,更改显示在 adapter.Update (table_2);
行中。
更改不会显示在数据库中(更改不会保存到数据库中)。
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
i++;
Save();
richTextBox1.Text += i + " Event - `CellValueChanged` \r\n";
}
MSDN documentation 在 CellEndEdit
:
Occurs when edit mode stops for the currently selected cell.
并遵循有关如何在验证错误的情况下捕获此事件触发的示例 - 这就是它停止的原因:不是因为用户已完成,而是因为发生了验证事件。另一方面,CellValueChanged
上的 MSDN documentation 表示
The DataGridView.CellValueChanged event occurs when the user-specified value is committed, which typically occurs when focus leaves the cell.
这是你的情况。干杯!
用户对单元格进行了更改。
CellEndEdit
事件被触发。
在 Save ()
方法中,更改显示在 adapter.Update (table_2);
行中。
数据库中未显示更改(更改未保存到数据库)。
如果用户使用按钮调用Save ()
方法,则更改显示在数据库中(在数据源tabledataGridView
)。
问题。
如何在更改 dataGridView 中的单元格值后更新数据源中的更改?
我的代码
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
i++;
Save();
richTextBox1.Text += i + " Event - `CellEndEdit` \r\n";
}
public DataTable CreateCmds()
{
table_2 = new DataTable();
try
{
string connectionString = @"Data Source=.\SQLEXPRESS1;Initial Catalog=Prb;Integrated Security=True";
string queryString = "SELECT * FROM tbl_01_Groups";
using (SqlConnection connection = new SqlConnection(connectionString))
{
adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(queryString, connection);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
connection.Open();
adapter.Fill(table_2);
}
}
catch (Exception ex)
{
string s = ex.Message;
string t = ex.StackTrace;
// throw;
}
return table_2;
}
public void Save()
{
string connectionString = @"Data Source=.\SQLEXPRESS1;Initial Catalog=Prb;Integrated Security=True";
string queryString = "SELECT * FROM tbl_01_Groups";
using (SqlConnection connection = new SqlConnection(connectionString))
{
adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(queryString, connection);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
connection.Open();
adapter.Update(table_2);
}
}
Update_1
当我使用 CellValueChanged
事件时,也会发生同样的事情。
CellValueChanged
事件被触发。
在 Save ()
方法中,更改显示在 adapter.Update (table_2);
行中。
更改不会显示在数据库中(更改不会保存到数据库中)。
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
i++;
Save();
richTextBox1.Text += i + " Event - `CellValueChanged` \r\n";
}
MSDN documentation 在 CellEndEdit
:
Occurs when edit mode stops for the currently selected cell.
并遵循有关如何在验证错误的情况下捕获此事件触发的示例 - 这就是它停止的原因:不是因为用户已完成,而是因为发生了验证事件。另一方面,CellValueChanged
上的 MSDN documentation 表示
The DataGridView.CellValueChanged event occurs when the user-specified value is committed, which typically occurs when focus leaves the cell.
这是你的情况。干杯!