private void CreateMeasurementLogEntry(FitnessTrackerPlus.Web.Data.Measurement measurement)
        {
            MeasurementLogEntry entry = new MeasurementLogEntry();

            // Setup new measurement log entry with selected date, measurement and current user

            IEnumerator units = measurement.MeasurementsUnits.GetEnumerator();

            units.MoveNext();

            entry.measurement_id = measurement.id;
            entry.entry_date     = Globals.SelectedDate;
            entry.user_id        = Globals.CurrentUser.id;
            entry.unit_id        = (units.Current as MeasurementsUnits).unit_id;

            context.MeasurementLogEntries.Add(entry);
            context.SubmitChanges((ChangesSubmitted) =>
            {
                if (!ChangesSubmitted.HasError)
                {
                    MeasurementData.Load();
                }
            }, null);
        }
        private void CustomMeasurementForm_EditEnded(object sender, DataFormEditEndedEventArgs e)
        {
            if (e.EditAction == DataFormEditAction.Cancel && CustomMeasurementCancelled != null)
            {
                CustomMeasurementCancelled(this, null);
            }
            else
            {
                if (CustomMeasurementForm.ValidateItem())
                {
                    // If validation succeeds then add the exercise to the database

                    context.Measurements.Add(CustomMeasurementForm.CurrentItem as FitnessTrackerPlus.Web.Data.Measurement);
                    context.SubmitChanges((MeasurementSubmitted) =>
                    {
                        if (!MeasurementSubmitted.HasError)
                        {
                            FitnessTrackerPlus.Web.Data.Measurement customMeasurement = CustomMeasurementForm.CurrentItem as FitnessTrackerPlus.Web.Data.Measurement;

                            // If user has selected an existing unit of measure create a new entry
                            // in the measurements_measurement_units table

                            if (selectedUnit != null)
                            {
                                context.MeasurementsUnits.Add(new MeasurementsUnits {
                                    unit_id = selectedUnit.id, measurement_id = customMeasurement.id
                                });
                                context.SubmitChanges((MeasurementsUnitsSubmitted) =>
                                {
                                    if (!MeasurementsUnitsSubmitted.HasError)
                                    {
                                        if (CustomMeasurementCreated != null)
                                        {
                                            CustomMeasurementCreated(this, new CustomMeasurementCreatedEventArgs(customMeasurement));
                                        }
                                    }
                                }, null);
                            }
                            else
                            {
                                // Otherwise we also need to add an entry to the measurement_units table

                                TextBox customUnit = CustomMeasurementForm.FindNameInContent("CustomUnit") as TextBox;

                                context.MeasurementUnits.Add(new MeasurementUnit {
                                    unit = customUnit.Text, user_id = Globals.CurrentUser.id
                                });
                                context.SubmitChanges((MeasurementUnitSubmitted) =>
                                {
                                    if (!MeasurementUnitSubmitted.HasError)
                                    {
                                        // Need to use the id of the newly created unit of measure

                                        MeasurementUnit createdUnit = MeasurementUnitSubmitted.ChangeSet.AddedEntities[0] as MeasurementUnit;

                                        context.MeasurementsUnits.Add(new MeasurementsUnits {
                                            unit_id = createdUnit.id, measurement_id = customMeasurement.id
                                        });
                                        context.SubmitChanges((MeasurementsUnitsSubmitted) =>
                                        {
                                            if (!MeasurementsUnitsSubmitted.HasError)
                                            {
                                                if (CustomMeasurementCreated != null)
                                                {
                                                    CustomMeasurementCreated(this, new CustomMeasurementCreatedEventArgs(customMeasurement));
                                                }
                                            }
                                        }, null);
                                    }
                                }, null);
                            }
                        }
                    }, null);
                }
            }
        }
        public MeasurementLog()
        {
            InitializeComponent();

            Loaded += (s, e) =>
            {
                // Setup control event handlers

                Calendar.SelectedDate          = Globals.SelectedDate;
                Calendar.SelectedDatesChanged += (se, ev) =>
                {
                    if (Calendar.SelectedDate.HasValue)
                    {
                        Globals.SelectedDate = Calendar.SelectedDate.Value;

                        LoadCurrentImage();
                    }
                };

                MeasurementLogGrid.LayoutUpdated += (se, ev) => { DataGridHelper.ResizeGrid(0, MeasurementLogGrid); };
                MeasurementLogGrid.RowEditEnded  += new EventHandler <DataGridRowEditEndedEventArgs>(MeasurementLogGrid_RowEditEnded);
                MeasurementLogGrid.LoadingRow    += new EventHandler <DataGridRowEventArgs>(MeasurementLogGrid_LoadingRow);

                CustomMeasurement.Click += new RoutedEventHandler(CustomMeasurement_Click);
                UpdateImage.Click       += new RoutedEventHandler(UpdateImage_Click);
                DeleteSelected.Click    += new RoutedEventHandler(DeleteSelected_Click);

                // Hold onto a copy of the MeasurementContext contained in the XAML

                context = this.Resources["MeasurementContext"] as MeasurementContext;

                Parameter user_id = new Parameter();
                user_id.ParameterName = "user_id";
                user_id.Value         = Globals.CurrentUser.id;

                // Ensure that the user_id parameter is set for the DomainDataSource control before the query is executed

                MeasurementData.QueryParameters.Add(user_id);

                // Ensure that whenever data is being loaded into the DomainContext the ProgressBar control is visible
                // The ProgressBarVisibilityConverter will ensure that when IsLoading is true the Visibility is set to visible, false otherwise

                Binding binding = new Binding();
                binding.Source    = context;
                binding.Path      = new PropertyPath("IsLoading");
                binding.Converter = new ProgressBarVisibilityConverter();

                ProgressBar.SetBinding(ProgressBar.VisibilityProperty, binding);

                // Setup the ComboBox control now that the MeasurementContext is available

                context.Load <FitnessTrackerPlus.Web.Data.Measurement>(context.GetMeasurementsQuery(Globals.CurrentUser.id),
                                                                       LoadBehavior.RefreshCurrent, (MeasurementsLoaded) =>
                {
                    if (!MeasurementsLoaded.HasError)
                    {
                        Measurements.ItemsSource   = MeasurementsLoaded.Entities;
                        Measurements.SelectedIndex = 0;
                    }
                }, null);

                Measurements.SelectionChanged += (se, ev) =>
                {
                    FitnessTrackerPlus.Web.Data.Measurement selected = Measurements.SelectedItem as FitnessTrackerPlus.Web.Data.Measurement;

                    if (selected.id > 0)
                    {
                        CreateMeasurementLogEntry(selected);
                    }
                };

                LoadCurrentImage();
            };
        }