0

以下のコード dr.SetAdded() ステートメントでは、次のようなエラーが発生します。

「setadded と setmodified は、datarowstate が変更されていないデータ行でのみ呼び出すことができます」

      dBindSet.AcceptChanges()


         For Each dt As DataTable In dBindSet.Tables

   BindingContext(dt).EndCurrentEdit()

          For Each dr As DataRow In dt.Rows

                    dr.SetAdded()

                    dr.Item("CREATEDON") = strServerDate
                    dr.Item("CREATEDBY") = iUserID

                 Next
            Next
4

2 に答える 2

0

私の理解が正しければ、テーブルに変更または挿入されたすべての行で、データテーブルの「CREATEDON」および「CREATEDBY」フィールドを設定する必要があります。この場合、すべての DataRowAcceptChangesのプロパティがリセットされ、変更された行を処理できなくなるため、呼び出してはいけません (データベースの更新は失敗します)。RowStateUnchanged

' Don't call this, you will loose the RowState info....
'dBindSet.AcceptChanges()
For Each dt As DataTable In dBindSet.Tables
    ' Not really needed here. It serves to update the UI. 
    'BindingContext(dt).EndCurrentEdit()
    For Each dr As DataRow In dt.Rows
        if(dr.RowState = DataRowState.Added OrElse dr.RowState = DataRowState.Modified then            
            dr.Item("CREATEDON") = strServerDate
            dr.Item("CREATEDBY") = iUserID
        end if
    Next
Next
于 2012-06-30T12:09:53.057 に答える
0

メソッドは、 を [ 追加済み] にSetAdded変更します。RowStateOP では、フィールドを更新しているので、このメソッドを呼び出す必要はありません。

このメソッドを呼び出す場合は、RowState.

For Each dr As DataRow In dt.Rows
   If dr.RowState=DataRowstate.Unchanged Then
      dr.SetAdded()
   End If
   dr.Item("CREATEDON") = strServerDate
   dr.Item("CREATEDBY") = iUserID
Next
于 2012-06-30T07:56:49.350 に答える