Sql 比较两个datagridview并删除依赖于行属性的行
我目前在vb.net windows窗体应用程序中工作。我有两个Sql 比较两个datagridview并删除依赖于行属性的行,sql,vb.net,datagridview,rows,Sql,Vb.net,Datagridview,Rows,我目前在vb.net windows窗体应用程序中工作。我有两个datagridview,我想交叉引用这些行并从datagridview1中删除某些行,这取决于是否在datagridview2中选中了复选框。当我在datagridview1中选中前端用户所采取的更新datagridview2的操作框时,就会出现此问题。但是,当我刷新这两个DataGridViews时,datagridview2显示已执行此操作,但是datagridview1中的复选框列返回到未选中状态,从而告诉前端用户重复此操作
datagridview
,我想交叉引用这些行并从datagridview1
中删除某些行,这取决于是否在datagridview2
中选中了复选框。当我在datagridview1
中选中前端用户所采取的更新datagridview2
的操作框时,就会出现此问题。但是,当我刷新这两个DataGridViews
时,datagridview2
显示已执行此操作,但是datagridview1
中的复选框
列返回到未选中状态,从而告诉前端用户重复此操作
另一方面,除了datagridview1
中的复选框
列外,所有数据都绑定到sql表。另外请注意,我有一个刷新按钮,它重复加载事件以刷新两个表
页面加载事件处理程序:
DataGridView1事件处理程序(CellContentClick):
Private子DataGridView1\u CellContentClick(发送者作为对象,e作为DataGridViewCellEventArgs)处理DataGridView1.CellContentClick
'将datagridview1更新为该行的操作已完成'
如果e.ColumnIndex为0,则
出口接头
如果结束
Dim v As String=DataGridView1.Rows(e.RowIndex).Cells(1).Value
选择案例MsgBox(“您确定剪切”&v&“已剪切吗?”,MsgBoxStyle.YesNo)
案例MsgBoxResult.否
出口接头
案例MsgBoxResult。是
尝试
Dim connstring=“数据源=。\sqlexpress;集成安全性=真”
使用conn1作为新的SqlConnection(connstring)
conn1.Open()
使用comm1作为SqlCommand=New SqlCommand(“更新Production.dbo.TBLFORDERED SET FormChannel=1,其中SHEAR='”&v&'”,conn1)
comm1.ExecuteNonQuery()
conn1.Close()
终端使用
终端使用
特例
MsgBox(例如ToString)
结束尝试
结束选择
我可能不正确,如果您已经尝试过,我向您道歉。我相信您可能会从阅读页面生命周期、订单事件处理程序和回发的影响中获益(例如)
在服务器控件中,某些事件(通常是单击事件)会导致页面立即发回服务器。HTML服务器控件和Web服务器控件(如TextBox控件)中的更改事件不会立即导致post。相反,它们在下一次post发生时被提升
关于回发
和页面加载
:
页面发回后,将引发页面的初始化事件(page_Init
和page_Load
),然后处理控制事件。除非您对页面事件处理有详细的了解,否则不应创建依赖于按特定顺序引发的更改事件的应用程序逻辑
我认为您遇到的部分问题是,当您触发回发
时,页面将做的第一件事,例如,通过单击单元格,是您在页面中的代码。加载
事件处理程序。在您的代码中,您会发现当处理页面时(在回发
),首先发生的事情是网格是数据绑定的。因此,在调用其他事件处理程序时,所做的任何更改都不会持久化。在执行诸如页面中的数据绑定之类的操作之前,一个常见的检查是检查页面是否没有被发回,如果IsPostBack=true
,则您可能希望跳过此类操作。是的,典型的做法是对其进行向下投票。是的,我知道我正在刷新datagridview,这会导致datagridview1刷新并显示前端用户已经处理的行。如果可以的话,我只想删除该行,但不幸的是,设施中的其他地方正在使用此表,这使得不可能只删除该行。我需要的是循环中的一个循环来检查并确保datagridview1不会重新加载已经完成的任务。基本上是这样的,如果DGV2中的剪力检查为完整,则不应选择DGV中相应的剪力。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'load datagridview1'
Dim ds As New DataSet
Dim AA As New DataSet
connectionstring = "Data source = .\sqlexpress; integrated security = true"
connection = New SqlConnection(connectionstring)
sql = "SELECT Shear FROM production.dbo.stagingcompleted"
Try
connection.Open()
adapter = New SqlDataAdapter(sql, connectionstring)
adapter.Fill(ds)
connection.Close()
DataGridView1.DataSource = ds.Tables(0)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
'load datagridview2'
connectionstring = "Data source = .\sqlexpress; integrated security = true"
connection = New SqlConnection(connectionstring)
sql = "SELECT * FROM production.dbo.tblFCOrdered"
Try
connection.Open()
adapter = New SqlDataAdapter(sql, connectionstring)
adapter.Fill(AA)
connection.Close()
DataGridView2.DataSource = AA.Tables(0)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
'update datagridview1 to the action for that row complete'
If e.ColumnIndex <> 0 Then
Exit Sub
End If
Dim v As String = DataGridView1.Rows(e.RowIndex).Cells(1).Value
Select Case MsgBox("Are you sure shear " & v & " has been cut?", MsgBoxStyle.YesNo)
Case MsgBoxResult.No
Exit Sub
Case MsgBoxResult.Yes
Try
Dim connstring = "Data Source=.\sqlexpress; integrated security = true"
Using conn1 As New SqlConnection(connstring)
conn1.Open()
Using comm1 As SqlCommand = New SqlCommand("UPDATE Production.dbo.tblFCOrdered SET FormChannel = 1 WHERE SHEAR = '" & v & "'", conn1)
comm1.ExecuteNonQuery()
conn1.Close()
End Using
End Using
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Select