Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 比较两个datagridview并删除依赖于行属性的行_Sql_Vb.net_Datagridview_Rows - Fatal编程技术网

Sql 比较两个datagridview并删除依赖于行属性的行

Sql 比较两个datagridview并删除依赖于行属性的行,sql,vb.net,datagridview,rows,Sql,Vb.net,Datagridview,Rows,我目前在vb.net windows窗体应用程序中工作。我有两个datagridview,我想交叉引用这些行并从datagridview1中删除某些行,这取决于是否在datagridview2中选中了复选框。当我在datagridview1中选中前端用户所采取的更新datagridview2的操作框时,就会出现此问题。但是,当我刷新这两个DataGridViews时,datagridview2显示已执行此操作,但是datagridview1中的复选框列返回到未选中状态,从而告诉前端用户重复此操作

我目前在vb.net windows窗体应用程序中工作。我有两个
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