' このイベントは、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