' このイベントは、IBindingList End Edit と同じように発生します。 ここでは、
' 挿入または更新としてデータベースの書き込みます。これを改良して、
' 行がダーティな場合または行が挿入の場合にのみ書き込みを実行できます。
Protected Overrides Sub OnRowEndEdit(ByVal e As Infragistics.Win.UltraWinDataSource.RowEndEditEventArgs)
MyBase.OnRowEndEdit(e)
' 変更が False の場合は戻ります。
Dim cn As New SqlConnection(_cn)
Dim cm As SqlCommand = cn.CreateCommand()
Dim strCmd As New System.Text.StringBuilder()
Dim insert As Boolean = (CType(e.Row.Item("CategoryID"), Integer) < 0)
If insert Then
strCmd.Append(" INSERT INTO Categories (")
strCmd.Append(" CategoryName,")
strCmd.Append(" Description )")
strCmd.Append(" VALUES ( ")
strCmd.Append(" @CategoryName, ")
strCmd.Append(" @Description) ")
strCmd.Append("; SELECT @CategoryID=SCOPE_IDENTITY();")
Else
strCmd.Append(" UPDATE Categories SET ")
strCmd.Append(" CategoryName=@CategoryName,")
strCmd.Append(" Description=@Description ")
strCmd.Append(" WHERE CategoryID=@CategoryID;")
End If
Dim Col As String
Dim prm As SqlParameter
Dim i As Integer
For i = 0 To e.Row.Band.Columns.Count - 1
Col = e.Row.Band.Columns(i).Key
prm = cm.Parameters.Add("@" + Col, e.Row.Item(Col))
Select Case Col
Case "CategoryID"
If insert Then
prm.Direction = ParameterDirection.Output
End If
Case Else
' 他の列をここに記述します。
End Select
Next
cm.Commandtype = CommandType.Text
cm.Commandtext = strCmd.ToString()
cn.Open()
cm.ExecuteNonQuery()
If insert Then
e.Row.Band.Columns("CategoryID").readonly = DefaultableBoolean.False
e.Row.Item("CategoryID") = cm.Parameters("@CategoryID").Value
e.Row.Band.Columns("CategoryID").readonly = DefaultableBoolean.True
End If
cn.Dispose()
End Sub