gpt4 book ai didi

c# - 在事件发生时从 DataGridView 更新数据库无法正常工作

转载 作者:搜寻专家 更新时间:2023-10-30 20:42:47 26 4
gpt4 key购买 nike

我有一个从数据库填充的 DataGridView。我有一个按钮可以将 DGV 的更改保存到数据库中,这很好用。但现在我希望数据库在 DGV 中发生更改时自动更新。

我尝试了几个事件,如 CellEndEdit、CellLeave、CellValidated、CellValueChanged 和 SelectionChanged。如果我编辑单元格内容并点击回车键或点击/选择它上方或下方的单元格工作正常,更改将保存到数据库中,但如果我点击选项卡或点击/选择同一行中它旁边的单元格,更改未保存。上述事件都没有帮助我解决这个问题。

//编辑

一些示例代码:

我这样填充我的 DGV

query_em = "select * from Table;";
try
{
dt_em = new DataTable();
da_em = new OleDbDataAdapter(query_em, connString);
cb_em = new OleDbCommandBuilder(da_em);
bs_em = new BindingSource();

da_em.Fill(dt_em);
bs_em.DataSource = dt_em;
dgv_em.DataSource = bs_em;
dgv_em.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}

通常我用一个按钮来更新它们

private void bt_save_em_Click(object sender, EventArgs e)
{
try
{
da_em.Update(dt_em);
MessageBox.Show("Database updated.");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
}

但我希望像这样的东西能正常工作,但它没有。上面描述了确切的问题。

private void dgv_em_SelectionChanged(object sender, EventArgs e)
{
da_em.Update(dt_em);
}

最佳答案

老问题,但我找到了一个可能对某些人有帮助的解决方案。事实上,datagridview(让我们称之为 dgv,我很懒 ^^)验证输入并仅在您更改行时更新数据源(通过按 enter、箭头、单击等)所以要使用的事件是 RowValidated。但是,如果您在编辑后停留在同一行,则不会触发此事件,例如,如果您单击同一行中的一个单元格。我找到了一个强制验证的解决方案:使用另一个事件并调用 this.validate(vb 中的 me.validate)

这是一些vb示例代码(正如我之前所说,我懒得用c#转换^^),希望这对您有所帮助:

Public Class Form1
Dim ValueChanged As Boolean
Dim da As MySqlDataAdapter

[...]

Private Sub dgv_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellValueChanged
ValueChanged = True
End Sub

//not sure this one is still usefull, i'm still working on this stuff :)
Private Sub dgv_RowValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.RowValidated
If ValueChanged Then
ValueChanged = False
da.Update(dt)
End If
End Sub

Private Sub dgv_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgv.SelectionChanged
If ValueChanged Then
ValueChanged = False
Me.Validate()
da.Update(dt)
End If
End Sub

关于c# - 在事件发生时从 DataGridView 更新数据库无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12546327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com