0

これは私の最初の投稿なので、ルールを破ったり、後でいくつかのことを明確にする必要がある場合はご容赦ください. 私の問題は、Visual Basic 2008 を使用していて、データビューにバインドされた複数のテキスト ボックスを持つ Windows フォームがあることです。データは問題なく編集でき、データは SQL 2005 Express データベースにコミットされます。また、プログラムを終了しない限り持続するレコードを追加することもできます。編集すると、新しいレコードが失われます。つまり、基本的に編集はコミットされていますが、追加はコミットされていません。これが私が使用しているコードです。お時間をいただきありがとうございます。

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Me.Cursor = Cursors.WaitCursor

  Try
    cn = New SqlConnection(sConnString)
    cn.Open()

    ' Open the Master table
    da = New SqlDataAdapter("SELECT * FROM CAMaster;", cn)
    ds = New DataSet
    da.Fill(ds, "Master")
    dv = New DataView(ds.Tables("Master"))
    cm = CType(Me.BindingContext(dv), CurrencyManager)
    dv.AllowNew = True
    dv.AllowEdit = True
    dv.AllowDelete = True

    ' Bind the form Textboxes to the Master table dataview and assign formatting
    Dim ctl As Control
    For Each ctl In Controls
      If TypeOf ctl Is TextBox Then
        If ctl.Tag <> "" Then
          Select Case ctl.Tag
            Case "Date"
              ctl.DataBindings.Add("Text", dv, ctl.Tag, True, DataSourceUpdateMode.OnValidation, False, "MM/dd/yyyy")
            Case Else
              ctl.DataBindings.Add("Text", dv, ctl.Tag, True, DataSourceUpdateMode.OnValidation, False, "C2")
          End Select
        End If
      End If
    Next

  Catch ex As Exception
    MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Form Load Error")
    End
  End Try

  Me.Cursor = Cursors.Default
End Sub

Private Sub cmdAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdd.Click
  Try
    dv.RowFilter = ""
    dv.AddNew()
  Catch ex As Exception
    MsgBox(ex.Message, MsgBoxStyle.Information, "Add Error")
  End Try
End Sub

Private Sub cmdOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOk.Click
  Me.Cursor = Cursors.WaitCursor

  Dim i As Integer

  Try
    Me.Validate()
    cm.EndCurrentEdit()
    cb = New SqlCommandBuilder(da)
    da.Update(ds, "Master")
    ds.Tables("Master").AcceptChanges()

  Catch ex As Exception
    MsgBox(ex.Message)
  End Try

  SetButtons(True)

  If mbAddNewFlag Then
    Me.cmbDate.SelectedItem = Me.txtDate.Text
  End If

  Me.Cursor = Cursors.Default
End Sub
4

1 に答える 1

0

私はついに自分の問題の原因を突き止めました。コンテナ内に日付テキストボックスがありました。コンテナ内のテキストボックスにアクセスするには、別の方法で参照する必要があります。したがって、テキストボックスにデータバインドされることはありませんでした。問題を解決するために、テキストボックスをコンテナの外に移動し、元の投稿のコードが機能しました。私が理解していないのは、データセットを更新しようとしたときに例外が発生しなかった理由です。しかし、繰り返しになりますが、VB.netについては理解できないことがたくさんあります。

于 2013-01-09T15:31:08.673 に答える