2016-06-02 2 views
1

사용자가 DataGridView에서 무언가를 수정하고 데이터를 입력하지 않고 마지막 행을 선택하면 이벤트가 발생하면이 마지막 행이 포함됩니다. 데이터베이스에 추가 할 항목. 그런 다음 null 값 때문에 데이터베이스에 레코드를 저장할 수 없기 때문에 오류가 발생합니다. 이 특정 상황에서이 행을 제외시키고 싶습니다. 추가 할 행으로 취급해서는 안됩니다. 내가 확인하고 MakeChangesDataSet 기능에서 제외해야한다고 생각데이터 집합에 새 행이 변경되었습니다.

For Each row As DataGridViewRow In Grid.Rows 
     If Not row.IsNewRow Then 
      Dim cellValue As String = String.Empty 
      For i = 1 To row.Cells.Count - 1 
       cellValue = row.Cells(i).Value.ToString 
       If String.IsNullOrEmpty(cellValue) Then 
        MsgBox("All fields has to be filled out") 
        Exit Sub 
       End If 
      Next 
     End If 
    Next 

    marke.MakeChangesDS() 

Public Sub MakeChangesDataSet() Implements IDAL.MakeChangesDataSet 
    If Not GetGeschaftDataSet.HasChanges Then 
     MessageBox.Show("No changes to be done", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Warning) 
    Else 
     Dim i As Integer 
     Try 
      Using MyConnection = New SqlConnection(strcon) 
       Using cmd As New SqlCommand("SELECT * FROM T_Marke", MyConnection) 
        MyConnection.Open() 
        ' Create a data adapter in the method and throw it away afterwards 
        Using GetProjectsDataAdapter = New SqlDataAdapter(cmd) 
         Dim cmdbuilder As New SqlCommandBuilder(GetProjectsDataAdapter) 
         i = GetProjectsDataAdapter.Update(GetGeschaftDataSet, "trial1") 
        End Using 
       End Using 
      End Using 
      MessageBox.Show("Updated" & i & " marks", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information) 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 
    End If 
End Sub 

: 다음은 내 현재 코드입니다.

답변

0

SqlDataAdapter 클래스에는 행이 유효한지 확인하고 수행하도록 선택한 경우 해당 행의 업데이트를 취소 할 수있는 RowUpdating이라는 이벤트 처리기가 있습니다.

..... 
Using GetProjectsDataAdapter = New SqlDataAdapter(cmd) 
    Dim cmdbuilder As New SqlCommandBuilder(GetProjectsDataAdapter) 
    AddHandler GetProjectsDataAdapter.RowUpdating, AddressOf onUpdate 
    i = GetProjectsDataAdapter.Update(GetGeschaftDataSet, "trial1") 
    RemoveHandler GetProjectsDataAdapter.RowUpdating, AddressOf onUpdate 
End Using 

이 이벤트는 실제 업데이트/삽입/삭제가 발생하기 전에 업데이트해야하는 각 행에 대해 호출됩니다. 이벤트 핸들러 코드는 데이터로 수행 할 작업을 결정하는 데 필요한 모든 정보를 수신합니다. 이것이 INSERT, UPDATE 또는 DELETE 조작인지 알려주는 StatementType이 표시됩니다. 그런 다음 데이터베이스 엔진에서 예외가 발생하기 전에 SqlRowUpdatingEventArgs.Status을 설정하는 행을 사용하여 수행 할 작업을 결정할 수 있습니다.

Sub OnUpdate(sender as Object, args As SqlRowUpdatingEventArgs) 
    If args.StatementType = StatementType.Insert Then 
     if Not IsYourRowValid(args.Row) Then 
      args.Status = UpdateStatus.SkipThisRow 
     End If 
    End If 
End Sub 
관련 문제