Datagridview未保存对数据库的更改。
只是在表单中,而不是数据库。
我已检查数据库属性,Copy to output Directory
设置为cope if newer
。
这是我的代码:
public partial class ClientsManager : Form
{
public ClientsManager()
{
InitializeComponent();
}
private void clientsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
try
{
this.Validate();
this.clientsBindingSource.EndEdit();
//this.tableAdapterManager.UpdateAll(this.databaseDataSet);
this.clientsTableAdapter.Update(this.databaseDataSet.Clients);
MessageBox.Show("Changes has been Saved!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void ClientsManager_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'databaseDataSet.Clients' table. You can move, or remove it, as needed.
this.clientsTableAdapter.Fill(this.databaseDataSet.Clients);
}
到目前为止,我读过的大多数解决方案都是关于EndEdit()
和Update()
..我在我的代码中已经解决了这个问题但仍无效。
答案 0 :(得分:1)
您可以创建一个名为SAVE的新按钮,并将下面的代码放在其中。
yourdatadapatername.update(yourdatatablenamehere)
希望这有帮助。
答案 1 :(得分:1)
我在this Answer找到了解决方案:
这是一个非常普遍的问题。您使用| DataDirectory |替换字符串。这意味着,在Visual Studio环境中调试应用程序时,应用程序使用的数据库位于项目的子文件夹BIN \ DEBUG文件夹(或x86变体)中。这样做效果很好,因为您没有任何错误连接到数据库并进行更新操作。
但是,然后退出调试会话,并通过Visual Studio Server Explorer查看数据库。此窗口具有不同的连接字符串(可能指向项目文件夹中的数据库副本)。您搜索表格时看不到变化。
然后问题变得更糟。如果在项目文件和属性Copy to Output目录之间列出数据库文件设置为Copy Always,则每次重新启动调试会话时,原始数据库文件将从项目文件夹复制到输出文件夹(BIN) \ DEBUG)因此您之前的更改将丢失。现在,您的应用程序也没有看到之前所做的更改。
您可以停止此问题,将属性复制到输出目录更改为复制如果更新或从不复制。您还可以在服务器资源管理器中更新您的连接字符串,以查看数据库的工作副本或创建第二个连接。第一个仍然指向项目文件夹中的数据库,而第二个指向BIN \ DEBUG文件夹中的数据库。通过这种方式,您可以保留原始数据库以进行部署和架构更改,而使用第二个连接可以查看编码工作的有效结果。
编辑MS-Access数据库用户的特殊警告。如果您不编写或更改任何内容,查看表格的简单操作也会更改数据库的修改日期。因此,如果Newer启动,则标记为Copy,并将数据库文件复制到输出目录。使用Access可以更好地使用Copy Never。