【问题标题】:.net 4 DataGridView does not update the database sqldatasource after adding, updating and deleting rows.net 4 DataGridView增删改行后不更新数据库sqldatasource
【发布时间】:2012-09-26 16:17:28
【问题描述】:

我正在处理一个大项目,没有太多时间来解决每个问题,我使用的是 Windows 窗体,尤其是 DataGridView。我刚刚添加了一个可以查询数据库表的数据源。检查启用添加、删除和编辑属性。我通过拖放创建了这个 DataGridView,并添加了一个数据源。运行程序时查询工作正常,表格出现在我的 DataGridView 上,我可以在 DataGridView 上添加、编辑和删除行,但是当我通过 SQL Server Management Studio 查询表格时,表格中的记录仍然存在相同。可能是什么问题呢?

【问题讨论】:

  • 当 DataGridView 编辑/添加/删除行时,您是否正在更新数据库?你没有显示任何代码,所以很难说哪里出了问题。
  • 如何设置,当我在 DataGridView 上添加/编辑/删除行时,更改也将存储在数据库中?真的没有代码,我只是拖了一个DataGridView,绑定到一个数据源上。

标签: c# sql-server winforms datagridview sqldatasource


【解决方案1】:

数据源需要有插入/更新/删除命令才能使gridview工作,听起来它只有一个选择命令。

【讨论】:

  • 我要如何让它有插入/更新/删除命令?这个控件非常具有误导性,我认为当您启用添加/删除/更新时,它也会在数据库上这样做。显然,它只取决于 DataGridView。
  • 我猜您正在使用 SQLDataSource 对象将网格绑定到?它应该有一个 SelectCommand、UpdateCommand、DeleteCommand 和 InsertCommand - 见msdn.microsoft.com/en-us/library/yz1a0y8f.aspx 它不会知道如何在数据库中执行这些操作,除非你给它一个 sql 查询或存储过程来运行。或者,您可以在代码隐藏中处理事件并手动调用这些东西。
【解决方案2】:

很遗憾,您确实需要专门运行更新命令。

以下链接可能会有所帮助: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.updatecommand.aspx

这里讨论了如何自动保存到 SQL Server,如果相关的话: http://www.codeproject.com/Articles/12846/Auto-Saving-DataGridView-Rows-to-a-SQL-Server-Data

这是我喜欢 Entity Framework/MVC 的原因之一。非常简单的数据操作:D 如果您有兴趣/有空闲时间,我建议您检查一下。

【讨论】:

    【解决方案3】:

    如果您在完成表格后使用 dbnavigator,则应单击 dbnavigator 上的保存按钮,因为添加、编辑和删除在您单击 dbnavigator 中的保存按钮之前不会保存在数据库中。

    【讨论】:

      【解决方案4】:

      我找到了解决方案。我添加了一个名为“保存更改”的按钮。

      首先我做出初步声明:

          private SqlDataAdapter da;
          private DataTable dt;
          private SqlCommandBuilder sqlCommandBuilder = null;
          private SqlConnection Con = new SqlConnection(@"Data Source=......");
      

      这是加载填充它的 DataGridView 的代码:

           private void DataGridView_Load(object sender, EventArgs e)
          {
      
              Con.Open();
              da = new SqlDataAdapter(@"SELECT * FROM tbl", Con);
              sqlCommandBuilder = new SqlCommandBuilder(da);
      
      
              dt = new DataTable(); 
              da.Fill(dt);
              dataGridView1.DataSource = dt;
              Con.Close();
          }
      

      这是保存更改按钮的代码:

      private void button1_Click(object sender, EventArgs e)
          {
               SqlCommandBuilder local_SqlCommandBuilder = new SqlCommandBuilder(da);
      
                      local_SqlCommandBuilder.ConflictOption = System.Data.ConflictOption.OverwriteChanges;
      
                      da.UpdateCommand = local_SqlCommandBuilder.GetUpdateCommand();
      
                      da.Update(((System.Data.DataTable)this.dataGridView1.DataSource));
      
                      ((System.Data.DataTable)this.dataGridView1.DataSource).AcceptChanges();
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-13
        • 2021-12-11
        • 2014-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多