Windows窗体应用程序基础知识:从绑定的DataGridView中删除行

时间:2014-08-26 19:46:27

标签: vb.net winforms datagridview

我在WinForms应用程序上有一个DataGridView控件,该应用程序绑定在我的数据库中的一个表中。我希望每当用户从DataGridView“拉”一行到位于它旁边的单独的DataGridView时(这最初是空白的并且没有绑定到任何东西),这个DataGridView就会改变。

我相信你以前见过这样的东西,让我画一张图。这将是一个在左侧DataGridView表中选择了Row1,然后点击拉动按钮将其拉到右侧DataGridView表的示例:

Database:                       ToBeDeleted:
Row1               ______       Row1
Row2               |Pull|
Row3               |--->|                                                ______________
etc..              ------                                               |Remove Records|

现在,当用户“拉”左表中的一个记录到右表时,我想离开表更新自己不再有该行了。这样,用户无法将相同的两行添加到右侧表中,并且它会立即反映它们将要进行的更改(因为右侧表表示要从左侧表中删除的记录)。

1 个答案:

答案 0 :(得分:1)

我认为你的项目没有错,这并不难。 我在此示例中使用Linq To Entities,因此我将数据库表映射为对象。

enter image description here

  1. 创建2个数据绑定DGV,将它们绑定到2个差异数据源(BindingSource)并选择Object。对象类型是相同的,因为您将它们绑定到同一个数据库表(在我的情况下,行对象被称为其表,Table3
  2. 左DGV绑定到Table3BindingSource,右DGV绑定到Table3BindingSourceTBD
  3. 从数据库中获取左DGV的数据(从表中基本选择)
  4. 按钮Pull从左侧dgv中删除对象并将其添加到另一个
  5. 按钮Delete只循环通过右行,并处理数据删除操作
  6. 最后,查询数据库以获取更新数据(左侧dgv)并清除右侧dgv
  7. 样品:

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        GetData()
    End Sub
    
    Sub GetData()
        Dim db = New StackOverflowEntities
    
        Table3BindingSource.DataSource = db.Table3.OrderBy(Function(x) x.Id).ToList()
    End Sub
    
    
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    
        Try
            Dim x = CType(Table3BindingSource.Current, Table3)
            'remove from left dgv
            Table3BindingSource.RemoveCurrent()
            'add to right dgv
            Table3BindingSourceTBD.Add(x)
        Catch ex As Exception
        End Try
    
    End Sub
    
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        'delete rows in datagridview TBD
    
        Dim db = New StackOverflowEntities
        'loop rows
        For Each r In Table3BindingSourceTBD
    
            'cast right dgv row to underlying object
            Dim y = CType(r, Table3)
    
            'set object to be deleted
            Dim dr = (From x In db.Table3
                     Where x.Id = y.Id
                     Select x).Single()
    
            db.Table3.DeleteObject(dr)
        Next
    
        Try
            'commit changes to db
            db.SaveChanges()
            MsgBox("db updated")
    
        Catch ex As Exception
    
        Finally
            'refresh all data in left dgv
            GetData()
            'simply clear right dgv
            Table3BindingSourceTBD.Clear()
        End Try
    End Sub
    

    我使用了基本的Linq To Entities但是任何东西都可以工作(纯SQL,Linq2SQL ......)。如果您需要项目源,请询问

    祝你好运