强制从筛选的数据网格视图更新到数据库
本文关键字:视图 网格 更新 数据库 数据网 数据 筛选 | 更新日期: 2023-09-27 17:56:41
我创建了一个应用程序来修复从机器传输数据时的日期转换问题。转换效果很好。我创建了一个包含所有记录的数据网格视图。然后,我对 DataGridView 进行排序,以使用 SqlDataAdapter 和 DataSet 显示需要更新的数据。然后,我对 DataGridView 中的数据进行更改,然后单击保存按钮以将更改应用于数据库表。
try
{
MessageBox.Show("Complete");
this.log5DataGridView.EndEdit();
//this.log5BindingSource.DataSource = this.log5DataGridView.DataSource; <-- Last Resort
this.log5BindingSource.ResetBindings(false);
this.log5BindingSource.EndEdit();
this.log5TableAdapter.Update(roboticlineDataSet.Log5);
}
catch { }
当我在调试模式下运行时,log5DataGridView.DataSource Table[] 显示数据更改可用。但是log5BindingSource似乎从未得到将其推送到TableAdapter Update的更改。我尝试了ResetBindings,EndEdit()最后一件事是获取数据源并将其强制到BindingSource。
如果我使用以下代码搜索精确的记录,则不会保存/更新到数据库。
using (SqlDataAdapter adpt = new SqlDataAdapter("SELECT * FROM [dbo].[RoboticLine] WHERE [FSItemNumber] = '" + Value + "' ORDER BY [FSItemNumber] ASC;", conn))
{
DataSet ds = new DataSet();
adpt.Fill(ds);
valueComboBox.Enabled = false;
log5DataGridView.DataSource = ds.Tables[0];
log5DataGridView.Refresh();
this.log5DataGridView.Rows[0].Selected = true;
}//end of adpt using
问题是是否有办法将搜索的log5DataGridView记录保存回数据库,因为datagridview表保留更改,但log5BindingSource仍然包含原始的
this.log5TableAdapter.Fill(this.roboticlineDataSet.Log5);
谢谢。
找出发生了什么,当我对数据网格视图进行编程以显示搜索的数据时,它没有更改绑定源,而是从表单加载()中保持相同。
this.log5TableAdapter.Fill(this.roboticlineDataSet.Log5);
为了解决这个问题,我在Soultion Explorer的Dataset.xsd位置找到了RoboticLineTable。在这里,我选择了roboticlinetable适配器,并在选择Add->Query的位置右键单击。在这里,我创建了一个 SQL 查询,其中 ID = @Value 来执行所需的过滤/搜索。这会将使用此代码替换使用 SqlDataAdapter 代码
this.log5DataGridView.EndEdit();
this.log5BindingSource.EndEdit();
this.log5tableAdapter.FillByID(this.roboticline.Log5, Value);
this.invalidate();
this.log5DatagridView.Refresh();
现在,当我希望保存时,绑定源具有在数据网格视图中所做的更改,并更新/保存到数据库。创建和重新填充表适配器有助于为您保留指向绑定源的链接。
希望这对将来可能遇到这种情况的其他人有所帮助