종료전 확인 설정시 haschange()와 .BindingContext(DataSet.도서관리).EndCurrentEdit() 문제 문의

답변됨 종료전 확인 설정시 haschange()와 .BindingContext(DataSet.도서관리).EndCurrentEdit() 문제 문의

  • 2012년 3월 5일 월요일 오전 8:40
     
     

    vs 2010-비쥬얼 베이직으로 프로그램을 만들면서 '종료'전 데이타가 변경,추가시 사용자에게 '저장'을 할 것인지를 확인하는 과정에서

    haschange()와,  Me.BindingContext(야학운영DataSet.도서관리).EndCurrentEdit()를 적용하면 datagridview에서

    변경데이타는 적용이 되지만 Form의 데이타는 첫 row에서는 적용이 되고, 

     다음 row부터는 Form의 대이타는 적용이 되지않아 hsachange()의미가 없어집니다.

    해결방법이 없는지 문의합니다. -네이버나 구글을 아무리 뒤져도 해결 방법이 없어서........

    . 프로그램은 Form형식과 아래에 datagridview를 이용했읍니다. 하지만 datagridview에서 자료응 수정하면 haschange(0가 적용되고

      Form의 textbox자료는 다음 row부터는 적용이 되지않습니다.

    - 프로그램 코드  참고 -

    Private Sub 종료_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 종료.Click

            Dim response As MsgBoxResult
            Me.BindingContext(야학운영DataSet.도서관리).EndCurrentEdit()

            If 야학운영DataSet.HasChanges(DataRowState.Added Or DataRowState.Modified) = True Then

                response = MsgBox("자료가 수정되었읍니다.", MsgBoxStyle.YesNoCancel + MsgBoxStyle.Question, "")

                If response = MsgBoxResult.Yes Then
                    Me.Validate()
                    Me.도서관리BindingSource.EndEdit()
                    Me.TableAdapterManager.UpdateAll(Me.야학운영DataSet)
              
                ElseIf response = MsgBoxResult.Cancel Then
                    'Cancel will keep the form open so they can continue
                    Exit Sub
                End If
            End If

     End Sub



모든 응답

  • 2012년 3월 7일 수요일 오전 6:01
    중재자
     
     답변됨

    안녕하십니까? 민들레야학 님,
    Microsoft MSDN의Forum 사이트를 방문해 주셔서 감사합니다.

    문의 하신 ”종료전 확인 설정시 haschange()와 .BindingContext(DataSet.도서관리).EndCurrentEdit() 문제 문의”에 대해 답변드리겠습니다.

    아래와 같은 형식으로 구문을 바꿔서 진행해 보시길 부탁드립니다.
    If 야학운영DataSet.HasChanges(DataRowState.Modified) = True or 야학운영DataSet.HasChanges(DataRowState.Added) = True Then

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.
    제시해 드린 답변이 도움이 되었기를 바랍니다.
     
    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다.

    • 답변으로 표시됨 민들레야학 2012년 3월 7일 수요일 오전 8:57
    •  
  • 2012년 3월 7일 수요일 오전 8:52
     
     

    질의에 대한 응답 감사드입니다.  하지만......

    질문에 대한 설명대로 해보았지만 여전히 문제 해결이 되지않고 있읍니다.

    저는 BindingNavigator를 이용해서 데이타를 이동-저장(Next, fore,dele,add)하는데 활용하고 있읍니다.

    문제는 데이타를 처음열고 자료를 입력하면 자료가 수정,저장이 되지를 않고,

    하지만 두번째 row를 수정하고, 세번째 수정하면 데이타가 정상적으로 수정됩니다.(Form의 데이타-textbox)

    하지만 Datagridviewer형식에서는 하나만 수정해도 Hsachange() 함수가 적용되어 이상없이 데이타가 수정이 됩니다.

    (이 현상에 대한 문의는 구를에서도 많이 보았지만 해결방법이 보이지 않았읍니다.)

    또한 부모테이블과 자식테이블이 연결된 Db는 Next(이동)만 해도 Haschange() 적용이 돕니다.

    혹시 비쥬알 베이직 프로그램의 BindingNavigator와  Haschange() 의  부딪히는 버그가 아닌지도 궁금합니다.




  • 2012년 3월 8일 목요일 오전 1:05
    중재자
     
     답변됨

    안녕하십니까? 민들레야학 님,

    질문의 요점을 지금에서 정확히 파악하였습니다.
    제 생각에는 일단 Hsachage()에는 문제가 없습니다.
    HasChanges - 변경된 값이 있는지 없는지 여부를 판단하는 함수입니다. 그렇기 때문에 리턴값이 System.Boolean 으로 False/True 입니다.

    말씀하신 이부분을 "저는 BindingNavigator를 이용해서 데이타를 이동-저장(Next, fore,dele,add)하는데 활용하고 있읍니다." 확인하시는 것이 좋을 것 같습니다.
    BindingNavigator를 사용하신다고 하셨는데 데이타를 순차적으로 읽는 부분에서 값을 하나씩 찍어서 첫번째 Row를 확인하시고, Modify를 시도 할경우에도 값을 확인하시는 것이 좋을 것 같습니다.
     
    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.
    제시해 드린 답변이 도움이 되었기를 바랍니다.
     
    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다.

     

    • 답변으로 표시됨 민들레야학 2012년 3월 8일 목요일 오전 8:43
    •  
  • 2012년 3월 8일 목요일 오전 8:55
     
     

    질의에 대한 설명에 감사드립니다.

    하지만 여전히 의문이 드는것은 처음 Db가 로드되었을 때 첫번째 자료를 수정하고 나서 종료를 하면 (haschange() 적용시) 자료가 수정되지 않고

    그냥 종료됩니다. 그래서 구글에서 여기저기 뒤져보니  Me.BindingContext(야학운영DataSet.도서관리).EndCurrentEdit()를 이용해보라는

    내용이 있어서 설정하고(처음 잘의 내용-참고) 보니 이제는 처음자료만 수정이되고 문제는 다음자료,그 다음자료를 수정해보면 마지막 자료가 수정이 되지않고 종료가 되는 것입니다.

    중재자님의 의견대로

    Private Sub BindingNavigatorMoveNextItem_Click(sender As System.Object, e As System.EventArgs) Handles BindingNavigatorMoveNextItem.Click

     Me.BindingContext(야학운영DataSet.도서관리).EndCurrentEdit()

    haschange()

    End Sub

    -프로그램을 작성하고 나서 시럼을 해도 해결이 되지않는 것입니다.

    제가 BindingNavigator를 이용한 방식이 잘못되엇는지......

    좋은 답변 부탁드립니다.



  • 2012년 3월 9일 금요일 오전 8:29
    중재자
     
     답변됨

    안녕하십니까? 민들레야학 님,

    아래 해외포럼에 유사한 케이스 입니다 참조 부탁드립니다.

    any programatic edits need to be made on the DataGridView's DataSource, not the DataGridView's cells themselves.

    [참조자료]
    DataGridView top row not updated in DB

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.
    제시해 드린 답변이 도움이 되었기를 바랍니다.
     
    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다.

    • 답변으로 표시됨 민들레야학 2012년 3월 9일 금요일 오전 10:06
    •  
  • 2012년 3월 10일 토요일 오전 2:01
     
     

    번거로운 질의에 응답 감사드립니다.

    저의 설명이 섬세하지 못한점 사과드립니다. 제가 의도한 질의 내용은 위의 그림괴 같습니다.

    우선 도서관리-Form형식과 아래 대출반남기록-datagridviewer형식의 두가지에서 아래 대출반남기록-datagridviewer형식은

    Haschange()와 Me.BindingContext(야학운영DataSet.도서관리).EndCurrentEdit()기능이 작동하지만

    위 그림 도서관리-Form형식에서 Textbox의 형식에서는 이상하게도 haschange()가 작동이 안되고,

    Me.BindingContext(야학운영DataSet.도서관리).EndCurrentEdit()를적용하면 하나는 적용이되고, 마직막 자료에서는 적용이

    안된다는 문제입니다.

    즉 Form형식의 textbox.tex이 왜 적용이 안되는지 궁금합니다.

  • 2012년 3월 28일 수요일 오전 1:11
     
     

    위 문제는 Me.Validate()를 이용함으로 해결이 되었습니다.

    즉 데이타 수정을 확인하는 Validate()를 데이타를 수정전에 코딩하면 문제가 해결됩니다.

    - 프로그램 코드  참고 -

    Private Sub 종료_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 종료.Click

           Me.Validate()

            Dim response As MsgBoxResult
            Me.BindingContext(야학운영DataSet.도서관리).EndCurrentEdit()

            If 야학운영DataSet.HasChanges(DataRowState.Added Or DataRowState.Modified) = True Then

                response = MsgBox("자료가 수정되었으면 저장할까요 ?.", MsgBoxStyle.YesNoCancel + MsgBoxStyle.Question, "")

                If response = MsgBoxResult.Yes Then
                    Me.Validate()
                    Me.도서관리BindingSource.EndEdit()
                    Me.TableAdapterManager.UpdateAll(Me.야학운영DataSet)
               
                ElseIf response = MsgBoxResult.Cancel Then
                    'Cancel will keep the form open so they can continue
                    Exit Sub
                End If
            End If

     End Sub

    .하지만 BindingNavigator를 이용해 자료를 이동만 해도 Haschange()가 작동하는 문제가 또 발생해서

    또 문제가 발생하는 어려움에 봉착했습니다.