2014-09-07 3 views
-1

현재 vb.net windows 애플리케이션에서 작업하고 있습니다. 두 DataGridViews 있고 행을 참조하고 checkboxdatagridview2 체크 된 경우에 따라 datagridview1 밖으로 특정 행을 제거하려면 크로스 싶습니다. 이 문제는 의 프런트 엔드 사용자가 수행 한 작업의 확인란을 선택하여 업데이트 할 때 발생합니다 (datagridview2). 그러나 모두 DataGridViews을 새로 고침 할 때 datagridview2은이 작업이 수행되었음을 나타내지 만 datagridview1checkbox 열은 선택 취소 된 상태로 돌아가므로 프런트 엔드 사용자에게이 작업을 반복하도록 알립니다.두 개의 DataGridview를 비교하고 행 속성에 따라 행을 제거하십시오.

checkbox 열 (datagridview1)을 제외한 모든 데이터는 SQL 테이블에 바인딩됩니다. 또한 참고, 두 테이블을 새로 고치려면로드 이벤트를 반복하는 새로 고침 단추가 있습니다.

페이지로드 이벤트 핸들러 :

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 

DataGridView1 이벤트 처리기 (CellContentClick) :

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 
+0

예, 그냥 downvote 전형적입니다. – Cheddar

답변

0

나는 아마도 잘못이고 이미이 시도 한 경우 내가 죄송합니다. 난 당신이 페이지의 라이프 사이클에 대한 독서의 혜택을 이벤트 핸들러와의 영향을 주문할 수있는 생각 PostBack 서버 컨트롤에서 특정 이벤트가, 일반적으로 페이지를 이벤트를 클릭 일으킬

(예를 this article에 대한) 즉시 서버에 다시 게시됩니다. HTML 서버 컨트롤 및 TextBox 컨트롤과 같은 웹 서버 컨트롤에서 변경 이벤트는 즉시 게시물을 발생시키지 않습니다. 대신, 다음에 게시물이 발생할 때 제기됩니다. PostBackPage.Load에 관해서

:

페이지가 다시 게시 된 후, 페이지의 초기화 이벤트 (Page_InitPage_Load)이 제기 한 다음 이벤트가 처리를 제어한다. 페이지 이벤트 처리에 대한 자세한 지식이 없으면 특정 순서로 작성된 변경 이벤트에 의존하는 응용 프로그램 논리를 작성하면 안됩니다.

내가 겪고있는 문제 중 일부는 페이지가 PostBack을 트리거 할 때 가장 먼저 수행 할 것이라고 생각합니다. 셀을 클릭하면 Page.Load 이벤트 핸들러에있는 코드입니다. 코드에서 페이지가 처리 될 때 (PostBack) 가장 먼저 일어나는 일은 그리드가 데이터 바인딩이라는 것입니다. 이 때문에 다른 이벤트 처리기를 호출 할 때 변경 사항이 유지되지 않습니다. Page.Load 함수에서 데이터 바인딩과 같은 작업을 수행하기 전에 일반적인 체크는 페이지가 다시 게시되지 않는지 확인하는 것입니다. IsPostBack = true과 같은 작업은 건너 뛰고 싶을 것입니다.

+0

예, 나는 datagridview를 새로 고치고 있으며, 프런트 엔드 사용자가 이미 처리 한 행을 새로 고치고 표시하는 원인이되는 것으로 알고 있습니다. 만약 내가 할 수만 있다면, 나는 그 행을 삭제할 것이지만 불행히도 그 시설의 다른 곳에서는이 테이블을 사용하고있어서 행을 지울 수 없다.루프 내에서 루프를 확인하고 datagridview1이 이미 완료된 작업을 다시로드하지 않도록해야합니다. DGV의 해당 전단이 선택되어서는 안됩니다. – Cheddar

관련 문제