2012-06-30 5 views
0

Ниже кода dr.SetAdded() утверждение дает ошибку, как это:ошибка в 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 
+0

Это не ясно что вы пытаетесь сделать здесь. Во-первых, вы вызываете AcceptChanges, а затем вызываете EndCurrentEdit (в какой строке?), Затем пытаетесь установить rowstate в Добавленный для каждой строки текущего текущего типа данных (так как каждая строка должна быть вставлена ​​как новая в базу данных) Возможно, если вы объясните, что ваши намерения мы могли бы ответить с другим подходом. – Steve

+0

Я не хочу добавлять какую-либо новую строку в datatable, но я просто хочу просто проверить, что если в datatable есть какая-либо строка, то обновите это имя столбца с именем «CREATEDON», «CREATEDBY» из существующей строки. – deep

+0

Затем удалите 'dr.SetAdded()'. В вашем случае бесполезно. – Steve

ответ

0

Метод SetAdded изменяет RowState к Добавлено. В OP вы обновляете поля, поэтому вам не нужно вызывать этот метод.

Если вы хотите позвонить этому методу, проверьте 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 
+0

Здесь отображается ошибка: rowstate не объявлен. – deep

0

Если я правильно понимаю, вам нужно установить «CREATEDON» и поле «CreatedBy» из DataTables в каждой строке, которая была изменена или вставленным в таблицах. Если это так, вы не должны вызывать AcceptChanges, потому что это приведет к сбросу RowState свойства каждого DataRow в Unchanged и вы не будете иметь возможности обрабатывать строки изменились (и обновление базы данных не получится)

' 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 
Смежные вопросы