【问题标题】:CRUD operations in Datagridview bound to SQL DatabaseDatagridview 中的 CRUD 操作绑定到 SQL 数据库
【发布时间】:2012-09-12 13:37:59
【问题描述】:

我在向我的 datagridview 添加新行时遇到问题。我希望它通过添加按钮来完成。我的绑定基于本教程http://msdn.microsoft.com/en-us/library/fbk67b6z.aspx,所以我的代码看起来几乎完全相同。是否可以:首先 - 向 datagridviews 绑定数据源添加新行,然后通过单击更新按钮更新数据库?我设法获得了所选行的克隆,它将用作新行的模板。感谢您的帮助。

【问题讨论】:

    标签: c# winforms datagridview crud


    【解决方案1】:

    好吧,我做不到那样的事情 dataGridView1.Rows.Add(selected_row);它抛出一个异常。和我 不知道如何在我的数据库中插入一行。 – user1651521 1 小时 以前

    对于数据绑定的网格,您不能将行直接添加到数据网格中。您必须将新行添加到绑定表中。

    因此,如果您使用与该示例相同的代码,您将向 DataTable 添加一条新记录,该记录是您的 bindingsource 对象的数据源。所以是这样的:

    private void addButton_Click(object sender, System.EventArgs e)
    {
        //I'm assuming your datatable is a member level variable 
        //otherwise you could get it through the grid
        //have the datatable send you back a new row
        DataRow newRow = table.NewRow();
        //populate your new row with default data here
        //....
        //add the new row to the data table
        table.Rows.Add(newRow);
    }
    

    【讨论】:

    • 谢谢。我还使用 foreach 循环复制值以填充我的新行。
    • 我还有一个问题。我将已编辑单元格的颜色更改为绿色,但在提交数据后我想恢复它们的默认颜色。你能帮我解决这个问题吗?
    • 当我在 UserDeletedRow 事件中使用 table.Rows.RemoveAt(deleted_row_index) 从表中删除一行时,它会将其从视图和表中删除,但提交对数据库的更改不会改变任何内容。当我重新加载数据库时,仍然有那些被删除的行。
    • 是否可以获得我加载到我的 DGV 的表的名称?
    • 我认为在单独的帖子中回答这些问题会更容易。例如,关于已编辑单元格的着色,我想看看您当前如何为已编辑单元格着色。
    【解决方案2】:

    您可以使用 DataGridView 的 OnRowsAdded 事件。这是此活动的链接:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.onrowsadded.aspx。在这种情况下,您可以遍历添加的每一行,并使用 Insert 语句将它们插入数据库中。我从未使用过那个事件,但它看起来像你需要的。

    编辑:我刚刚在您的示例中看到了这一点。

    private void submitButton_Click(object sender, System.EventArgs e)
    {
        // Update the database with the user's changes.
        dataAdapter.Update((DataTable)bindingSource1.DataSource);
    }
    

    如果您为 DataGridView 激活了 EditMode 和一个提交按钮,这不可行吗?您必须有权访问您的 SqlDataAdapter,因此将其声明为全局变量,您就可以在提交按钮的单击事件中使用它。

    【讨论】:

    • 如果您从数据库中获取数据,然后将其放入您发布的示例中的表中,您应该仍然能够插入新行。是什么阻止您在数据库中插入新行?
    • 好吧,我不能做类似的事情 dataGridView1.Rows.Add(selected_row);它抛出一个异常。而且我不知道如何在我的数据库中插入一行。
    • 您尝试过我在帖子中编辑下写的内容吗?我认为它可以解决你的问题。如果您遇到异常,请使用 try catch 调查是什么。在此处发布您的例外情况,以便我们为您提供帮助。
    • 我使用 submitButton_Click 提交更改,但它不适用于添加新行。
    猜你喜欢
    • 2016-10-08
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 2019-10-16
    相关资源
    最近更新 更多