我在WinForms应用程序上有一个DataGridView控件,该应用程序绑定在我的数据库中的一个表中。我希望每当用户从DataGridView“拉”一行到位于它旁边的单独的DataGridView时(这最初是空白的并且没有绑定到任何东西),这个DataGridView就会改变。
我相信你以前见过这样的东西,让我画一张图。这将是一个在左侧DataGridView表中选择了Row1,然后点击拉动按钮将其拉到右侧DataGridView表的示例:
Database: ToBeDeleted:
Row1 ______ Row1
Row2 |Pull|
Row3 |--->| ______________
etc.. ------ |Remove Records|
现在,当用户“拉”左表中的一个记录到右表时,我想离开表更新自己不再有该行了。这样,用户无法将相同的两行添加到右侧表中,并且它会立即反映它们将要进行的更改(因为右侧表表示要从左侧表中删除的记录)。
答案 0 :(得分:1)
我认为你的项目没有错,这并不难。
我在此示例中使用Linq To Entities
,因此我将数据库表映射为对象。
BindingSource
)并选择Object
。对象类型是相同的,因为您将它们绑定到同一个数据库表(在我的情况下,行对象被称为其表,Table3
)Table3BindingSource
,右DGV绑定到Table3BindingSourceTBD
Pull
从左侧dgv中删除对象并将其添加到另一个Delete
只循环通过右行,并处理数据删除操作样品:
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 ......)。如果您需要项目源,请询问