private void saveButton_Click(object sender, EventArgs e) { var allWarnings = new StringBuilder(); var allBlankCells = new List <DataGridViewCell>(); // validate that all channels have names foreach (var methodTablePair in isobaricMappingTables) { var tableWarnings = new StringBuilder(); foreach (var row in methodTablePair.Value.Rows.Cast <DataGridViewRow>()) { var blankCells = row.Cells.Cast <DataGridViewCell>().Where(o => o.Value == null || o.Value.ToString() == String.Empty); var blankChannels = blankCells.Select(o => methodTablePair.Value.Columns[o.ColumnIndex].HeaderText); if (blankChannels.Any()) { tableWarnings.AppendFormat("\t{0}: {1}\r\n", row.Cells[0].Value, String.Join(", ", blankChannels)); } allBlankCells.AddRange(blankCells); } if (tableWarnings.Length > 0) { allWarnings.AppendFormat("Some sample names for {0} were left blank:\r\n{1}\r\n\r\nDo you want to assign these channels to Empty?", methodTablePair.Key, tableWarnings); } } if (allWarnings.Length > 0) { if (MessageBox.Show(this, allWarnings.ToString(), "Warning", MessageBoxButtons.YesNo) == DialogResult.No) { return; } allBlankCells.ForEach(o => o.Value = "Empty"); } IDictionary <string, IList <string> > isobaricSampleMapping = new Dictionary <string, IList <string> >(); foreach (var methodTablePair in isobaricMappingTables) { foreach (var row in methodTablePair.Value.Rows.Cast <DataGridViewRow>()) { var sourceGroup = row.Cells[0].Value.ToString(); isobaricSampleMapping.Add(sourceGroup, new List <string>(row.Cells.Cast <DataGridViewCell>().Skip(1).Select(o => o.Value.ToString()))); } } var idpDbFilepath = session.Connection.GetDataSource(); var existingIsobaricSampleMapping = Embedder.GetIsobaricSampleMapping(idpDbFilepath); if (!existingIsobaricSampleMapping.SequenceEqual(isobaricSampleMapping)) { Embedder.EmbedIsobaricSampleMapping(idpDbFilepath, isobaricSampleMapping); DialogResult = DialogResult.OK; } else { DialogResult = DialogResult.Cancel; } Close(); }