How to: Save Data

[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]

Pending changes are committed to a data source when the user presses the Save button in a screen. However, you can also commit pending changes by adding code that calls the SaveChanges() method of a data source. You must add this code if you want to accomplish either of the following tasks:

  • Commit changes that you make to data that is located in other data sources.

  • Override the Save event of a screen.

Committing Changes That You Make to Data that is Located in Other Data Sources

The files in which you write custom code have a primary data source. If add custom code that modifies data from other data sources, you must commit those changes by calling the SaveChanges() method of that data source.

The following example shows code then runs when a user creates an Order in a screen and then clicks the Save button. The code updates a field in the Products entity by using a field in the Order Details entity. Because the Products entity is located in another data source, this code calls SaveChanges() method of that data source to commit the changes.

Public Class ApplicationDataService
         Private Sub Order_Inserting(ByVal entity As Order)
            For Each detail In entity.Order_Detail
                detail.Product.UnitsInStock = detail.Product.UnitsInStock - detail.Quantity
            Next

            Me.DataWorkspace.ProductDataSource.SaveChanges()
        End Sub
End Class
partial void Order_Inserting(Order entity)
      {
          foreach (Order_Detail detail in entity.Order_Detail)
          {
              detail.Product.UnitsInStock = detail.Product.UnitsInStock - detail.Quantity;
          }
          this.DataWorkspace.ProductDataSource.SaveChanges();
      }

Overriding the Save Event of a Screen

You can replace the behavior of the Save button on a screen by overriding the Save event. Because you are replacing the behavior of the Save button, your code must call the SaveChanges() method when you want to commit pending changes.

The following example overrides the Saving event of a customer screen. The author of this code overrides the Saving event to catch and handle a specific exception that might be thrown if the save operation fails.

Public Class CustomerScreen

         Private Sub CustomerScreen_Saving(ByRef handled As Boolean)

            Try
                Me.DataWorkspace.ApplicationData.SaveChanges()

            Catch ex As DataServiceOperationException

                If ex.ErrorInfo = "DTSException" Then
                    Me.ShowMessageBox(ex.Message)
                End If


            End Try

            handled = True
        End Sub
End Class
public partial class CustomerScreen
     {
        partial void CustomerScreen_Saving(ref bool handled)
        {
            try
            {
                this.DataWorkspace.ApplicationData.SaveChanges();
            }
            catch (DataServiceOperationException ex)
            {
                if (ex.ErrorInfo == "DTSException")
                {
                    this.ShowMessageBox(ex.Message);
                }
            }
            handled = true;
        }
}

Next Steps

To learn about exceptions that you can catch and handle when saving data, see How to: Design a Query by Using the Query Designer.

To learn more about handling screen events such as the Saving event, see How to: Handle Screen Events.

To learn more about working with pending change sets in code, see How to: Handle Screen Events.

See Also

Other Resources

Data and Entities: The Information Behind Your Application