2013-11-13 3 views
-1

Кто-нибудь знает, почему этот код не работает? В основной форме у меня есть функция сохранения, но всякий раз, когда я нажимаю кнопку «Сохранить», «ничего не сохраняется».вызов функции сохранения из другой формы

public void spremiIzmjene() 
    { 
     try 
     { 
      this.bindingNavigator1.BindingSource.EndEdit(); 
      DataSet imaPromjene = this.dimproDataSet.GetChanges(); 
      if (imaPromjene != null) 
      { 
       int brojRedova = this.op_kontaktTableAdapter.Update(dimproDataSet.op_kontakt); 
       MessageBox.Show("Izmjene spremljene: " + brojRedova + " red dodan.", "Uspjeh"); 
       this.dimproDataSet.AcceptChanges(); 
       this.dimproDataSet.Clear(); 
       this.op_kontaktTableAdapter.Fill(dimproDataSet.op_kontakt); 
      } 
      else 
      { 
       MessageBox.Show("Nothing to save", "No changes"); 
      } 
     } 
     catch (Exception ex) 
     { 
      // msg 
      this.dimproDataSet.RejectChanges(); 
     } 

    } 

Я вызываю эту функцию из моей формы вставки. Проблема: мне нужно открыть форму вставки, ввести данные в поля, закрыть форму (но не писать в db, только сохранять изменения набора данных), а затем по форме закрыть событие вызова spremiIzmjene() в основной форме. Но всякий раз, когда я называю, что функция dataset.HasChanges возвращают ложные

Screenshot

благодаря

+0

'Если никакие измененные строки не найдены, метод возвращает null.' Http://msdn.microsoft.com/en-us/library/a4ey25we(v=vs.110).aspx Похоже, ничего не изменилось. – asawyer

+0

Я только что обновил свой вопрос с описанием проблемы. – Carlo

+0

, когда я помещаю этот код в форму вставки, сохраняют данные о событиях нажатия кнопки мыши. – Carlo

ответ

1

Да, потому что ничего не изменилось. Другими словами, если у вас есть привязанные к данным элементы управления, ни одно из значений не изменилось. Если вы обновляете строки вручную, вы, вероятно, должны называть AcceptChanges, когда этого не должно быть. Короче говоря, при изменении данных в DataTable, который находится в DataSet, вы хотите внести эти изменения, но не вызываете AcceptChanges, потому что это изменяет RowState на Unchanged.

+0

все уже пытались прокомментировать эту строку. Не помогло. – Carlo

+0

@ CarloŠtefanac, все в порядке. Как указано, * если вы вручную изменяли строки. * Другими словами, в другом методе. В вашем случае оставьте «AcceptChanges» там, где он был, и исправьте привязку. Вам необходимо привязать свои элементы управления к «DataRow» в «DataTable», чтобы изменения могли быть распознаны; ваша привязка неверна. –

+0

спасибо. Есть ли у вас пример или руководство, как это сделать? – Carlo

Смежные вопросы