2016-06-02 19 views
1

ユーザーがDataGridViewで何かを変更し、データを入力せずに最後の(新しい)行を選択すると、イベントが発生したときに最後の新しい行がデータベースに追加するもの。私はnull値のためにデータベースにそのレコードを置くことができないので、エラーが発生します。その特定の状況でこの行を除外したいので、追加するものとして扱われるべきではありません。以下は私の現在のコードです:データセットに新しい行が追加されました

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 

私はMakeChangesDataSet関数でチェックして除外すべきだと思います。

答えて

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 
関連する問題