public override void SaveChanges(bool notifyUser) { paymentsDataGridView.EndEdit(); if (_dataChanged && paymentsDataGridView.Columns.Count > 4) { if (notifyUser && DialogResult.No == MessageBox.Show(WindowMessages.SAVE_OR_DISCARD_CHANGES_MSG, WindowMessages.SAVE_OR_DISCARD_CHANGES_TITLE, MessageBoxButtons.YesNo, MessageBoxIcon.Warning)) { ClearChanges(); return; } using (var db = new FeeStatusesDBContext()) { foreach (int rowIndex in _changedCells.Keys) { var changedRow = paymentsDataGridView.Rows[rowIndex].DataBoundItem as DataRowView; string rowId = changedRow.Row.ItemArray[1].ToString(); foreach (int colIndex in _changedCells[rowIndex]) { short changedColName = short.Parse(paymentsDataGridView.Columns[colIndex].HeaderText); //YearXXXX FeeLogs log = db.Member.Find(rowId).FeeLogs.SingleOrDefault(l => l.Year == changedColName); if (log != null) { log.PaymentStatusID = (int)changedRow.Row.ItemArray[colIndex]; } else { db.FeeLogs.Add(new FeeLogs { VulkanID = rowId, Year = changedColName, PaymentStatusID = (int)changedRow.Row.ItemArray[colIndex] } ); } } } int result = db.SaveChanges(); } ClearChanges(); NotifyDependantControlsOfChanges(); } }
public void BindPaymentsDataGridView(bool onlyMustPayers, bool includeDeleted) { paymentsDataGridView.CellValueChanged -= PaymentsDataGridView_CellValueChanged; using (var db = new FeeStatusesDBContext()) { var members = db.Member. Where(m => !onlyMustPayers || m.MustPay). Where(m => m.Active || includeDeleted). OrderBy(m => m.Surname). ThenBy(m => m.Name); var feeLogs = members.SelectMany(m => m.FeeLogs).ToList(); var paymentStatuses = db.PaymentStatus.ToList(); IEnumerable <int> years = null; if (feeLogs.Count > 0) { int maxYear = feeLogs.Max(l => l.Year); int minYear = feeLogs.Min(l => l.Year); years = Enumerable.Range(minYear, maxYear - minYear + 1); DataGridViewComboBoxColumn col; foreach (int year in years) { if (!paymentsDataGridView.Columns.Contains("Year" + year)) { col = new DataGridViewComboBoxColumn { DataSource = paymentStatuses, Name = "Year" + year, HeaderText = year.ToString(), DisplayMember = "Text", ValueMember = "PaymentStatusID", DataPropertyName = "Year" + year, FlatStyle = FlatStyle.Flat }; paymentsDataGridView.Columns.Add(col); } } } // create a DataTable to hold our data ... DataTable dt = CreateDataTable(years); object[] values; foreach (Member member in members) { values = years != null ? new object[5 + years.Count()] : new object[5]; values[0] = member.Active; values[1] = member.VulkanID; values[2] = member.Surname; values[3] = member.Name; values[4] = string.Format("{0} ({1} let)", member.DateOfBirth.ToString("dd.MM.yyyy"), member.GetMemberAgeForCurrentYear()); if (years != null) { int i = 0; foreach (int year in years) { FeeLogs log = member.FeeLogs.FirstOrDefault(l => l.Year == year); values[5 + i] = log != null ? log.PaymentStatusID : PaymentStatus.NI_PODATKA; i++; } } dt.Rows.Add(values); } paymentsDataGridView.DataSource = dt; ClearSelection(paymentsDataGridView); } paymentsDataGridView.CellValueChanged += PaymentsDataGridView_CellValueChanged; }
private void ImportPaymentHistory(string fullFilePath) { string line; var file = new StreamReader(fullFilePath, Encoding.UTF8); try { using (var db = new FeeStatusesDBContext()) { while ((line = file.ReadLine()) != null) { string[] lineData = line.Split(';'); short year = 2001; Member member = db.Member.Find(lineData[0]); if (member != null && member.Gender) // moski { for (int i = 8; i < 20; i++) { string stat = lineData[i]; var log = new FeeLogs { Member = member, Year = year }; switch (stat) { case "DA": log.PaymentStatusID = PaymentStatus.PLACAL; break; case "NE": log.PaymentStatusID = PaymentStatus.NI_PLACAL; break; case "VETERAN": log.PaymentStatusID = PaymentStatus.VETERAN; break; case "XXX": log.PaymentStatusID = PaymentStatus.MLADOLETNIK; break; default: if (member.GetMemberAgeForYear(year) < 18) { log.PaymentStatusID = PaymentStatus.MLADOLETNIK; } else if (member.GetMemberAgeForYear(year) >= 60) { log.PaymentStatusID = PaymentStatus.VETERAN; } else { log.PaymentStatusID = PaymentStatus.NI_PODATKA; } break; } member.FeeLogs.Add(log); year++; } } } db.SaveChanges(); } } catch (DbEntityValidationException e) { foreach (DbEntityValidationResult eve in e.EntityValidationErrors) { Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (DbValidationError ve in eve.ValidationErrors) { Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } catch (Exception ex) { Debug.WriteLine(ex.StackTrace); } BindPaymentsDataGridView(onlyMustPayers, includeDeleted); }