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(); }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); // get the list of sources, the group they're in, and their quantitation method var spectrumSources = session.Query <SpectrumSource>().ToList(); var sourcesByGroup = spectrumSources.GroupBy(o => o.Group); // find groups with more than 1 quantitation method; put these in a separate list for "invalid" groups var allGroupsByMethod = sourcesByGroup.GroupBy(o => o.Select(o2 => o2.QuantitationMethod)); var invalidGroups = allGroupsByMethod.Where(o => o.Count() > 1).SelectMany(o2 => o2.Select(o3 => o3.Key)); // divide valid source groups by quantitation method var validGroupsByMethod = sourcesByGroup.Where(o => !invalidGroups.Contains(o.Key)).GroupBy(o => o.Select(o2 => o2.QuantitationMethod).Distinct().Single()); if (validGroupsByMethod.Any()) { var existingIsobaricSampleMapping = Embedder.GetIsobaricSampleMapping(session.Connection.GetDataSource()); // specialize the default mapping table for each quantitation method foreach (var method in validGroupsByMethod) { var dgv = isobaricMappingDataGridView.CloneAsDesigned(); dgv.EditingControlShowing += isobaricMappingDataGridView_EditingControlShowing; isobaricMappingDataGridView.Columns.Cast <DataGridViewColumn>().ForEach(o => dgv.Columns.Add((DataGridViewColumn)o.Clone())); if (method.Key == QuantitationMethod.ITRAQ4plex) { foreach (int ion in new int[] { 114, 115, 116, 117 }) { var column = new DataGridViewTextBoxColumn { HeaderText = "iTRAQ-" + ion.ToString(), Name = "iTRAQ-" + ion.ToString() + "Column", AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = 0.25f, }; dgv.Columns.Add(column); } } else if (method.Key == QuantitationMethod.ITRAQ8plex) { foreach (int ion in new int[] { 113, 114, 115, 116, 117, 118, 119, 121 }) { var column = new DataGridViewTextBoxColumn { HeaderText = "iTRAQ-" + ion.ToString(), Name = "iTRAQ-" + ion.ToString() + "Column", AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = 0.125f }; dgv.Columns.Add(column); } } else if (method.Key == QuantitationMethod.TMT2plex) { foreach (string ion in new string[] { "126", "127" }) { var column = new DataGridViewTextBoxColumn { HeaderText = "TMT-" + ion, Name = "TMT-" + ion + "Column", AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = 0.5f }; dgv.Columns.Add(column); } } else if (method.Key == QuantitationMethod.TMT6plex) { foreach (string ion in new string[] { "126", "127", "128", "129", "130", "131" }) { var column = new DataGridViewTextBoxColumn { HeaderText = "TMT-" + ion, Name = "TMT-" + ion + "Column", AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = 0.1666f }; dgv.Columns.Add(column); } } else if (method.Key == QuantitationMethod.TMT10plex) { foreach (string ion in new string[] { "126", "127N", "127C", "128N", "128C", "129N", "129C", "130N", "130C", "131" }) { var column = new DataGridViewTextBoxColumn { HeaderText = "TMT-" + ion, Name = "TMT-" + ion + "Column", AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = 0.1f }; dgv.Columns.Add(column); } } // add source groups to the table foreach (var group in method) { int newRowIndex = dgv.Rows.Add(group.Key.Name); if (existingIsobaricSampleMapping.ContainsKey(group.Key.Name)) { var existingSampleNames = existingIsobaricSampleMapping[group.Key.Name]; if (existingSampleNames.Count != dgv.Columns.Count - 1) { continue; } for (int i = 0; i < existingSampleNames.Count; ++i) { dgv.Rows[newRowIndex].Cells[i + 1].Value = existingSampleNames[i]; } } } var tab = new TabPage(method.Key.ToString()); tab.Controls.Add(dgv); quantitationMethodsTabPanel.TabPages.Add(tab); isobaricMappingTables.Add(method.Key, dgv); } quantitationMethodsTabPanel.TabPages.Remove(noIsobaricMethodsTabPage); } quantitationMethodsTabPanel.TabPages.Remove(isobaricSampleMappingTabPage); }