public static IEnumerable <DataGridViewColumn> MakeTreeColumns(this ITreeFieldProvider provider, int fontWidth) { var fieldSetups = provider.TreeFields; List <DataGridViewColumn> columns = new List <DataGridViewColumn>(); foreach (var fieldSetup in fieldSetups) { DataGridViewColumn col = null; if (fieldSetup.Field == "SureToMeasure") { fieldSetup.Field = "STM"; } switch (fieldSetup.Field) { case "CuttingUnit": { continue; } case "Species": { col = new DataGridViewComboBoxColumn() { DataPropertyName = nameof(Tree.TreeDefaultValue), DisplayMember = nameof(TreeDefaultValueDO.Species), ValueMember = nameof(TreeDefaultValueDO.Self), FlatStyle = FlatStyle.Flat }; break; } case "CountOrMeasure": { col = new DataGridViewComboBoxColumn() { DataSource = new string[] { "C", "M", "I" }, FlatStyle = FlatStyle.Flat }; break; } case "LiveDead": { col = new DataGridViewComboBoxColumn() { DataSource = new string[] { "L", "D" }, FlatStyle = FlatStyle.Flat }; break; } case "Stratum": { col = new DataGridViewComboBoxColumn() { DataPropertyName = nameof(Tree.Stratum), DisplayMember = nameof(Stratum.Code), ValueMember = nameof(Stratum.Self), FlatStyle = FlatStyle.Flat, AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells }; if (provider is PlotStratum) { col = new DataGridViewTextBoxColumn() { DataPropertyName = nameof(Tree.Stratum), ReadOnly = true }; } break; } case "SampleGroup": { col = new DataGridViewComboBoxColumn() { DataPropertyName = nameof(Tree.SampleGroup), DisplayMember = nameof(SampleGroup.Code), ValueMember = nameof(SampleGroup.Self), FlatStyle = FlatStyle.Flat }; break; } case "KPI": { col = MakeColumn(fieldSetup.ColumnType); // col.ReadOnly = true; break; } case "Initials": { col = new DataGridViewComboBoxColumn() { //DataPropertyName = nameof(Tree.Initials), //DisplayMember = nameof(Cruiser.Initials), //ValueMember = nameof(Cruiser.Initials), FlatStyle = FlatStyle.Flat }; break; } default: { col = MakeColumn(fieldSetup.ColumnType); break; } } if (String.IsNullOrEmpty(col.DataPropertyName)) //see if we have already set the Mapping Name { col.DataPropertyName = fieldSetup.Field; } col.Name = col.DataPropertyName; if (String.IsNullOrEmpty(col.HeaderText)) { col.HeaderText = fieldSetup.Heading; } if (!string.IsNullOrEmpty(fieldSetup.Format) && //field has format (col.DefaultCellStyle == null || //and column doesn't have format set yet string.IsNullOrEmpty(col.DefaultCellStyle.Format))) { col.DefaultCellStyle = new DataGridViewCellStyle() { Format = fieldSetup.Format }; } if (fieldSetup.Width > 0) { col.Width = (int)fieldSetup.Width * fontWidth; col.Resizable = DataGridViewTriState.True; } else { col.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; col.Resizable = DataGridViewTriState.True; } yield return(col); } yield return(new DataGridViewButtonColumn() { Name = "Logs", HeaderText = "Logs", DataPropertyName = nameof(Tree.LogCountActual), AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader }); }
public static DataGridTableStyle InitializeTreeColumns(this ITreeFieldProvider provider, EditableDataGrid grid) { DataGridTableStyle tblStyle = new System.Windows.Forms.DataGridTableStyle() { MappingName = "Tree" }; int screenWidth = Screen.PrimaryScreen.WorkingArea.Width; int charWidth = MeasureTextWidth(grid, "0"); // Loop through each item in the fields list, // set up a column style and add it to the table style. foreach (TreeFieldSetupDO field in provider.TreeFields) { DataGridTextBoxColumn col; switch (field.Field) { case "CuttingUnit": { continue; } case "Species": { col = new FMSC.Controls.EditableComboBoxColumn() { DisplayMember = "Species", //((EditableComboBoxColumn)col).ValueMember = "Self"; MappingName = "TreeDefaultValue", Format = "[Species]" }; break; } case "CountOrMeasure": { col = new FMSC.Controls.EditableComboBoxColumn() { //((EditableComboBoxColumn)col).DisplayMember = "CountOrMeasure"; //((EditableComboBoxColumn)col).ValueMember = "CountOrMeasure"; DataSource = new string[] { "C", "M", "I" } }; break; } case "LiveDead": { col = new FMSC.Controls.EditableComboBoxColumn() { //((EditableComboBoxColumn)col).DisplayMember = "LiveDead"; //((EditableComboBoxColumn)col).ValueMember = "LiveDead"; DataSource = new string[] { "L", "D" } }; break; } case "Stratum": { if (provider is PlotStratum) { col = new DataGridTextBoxColumn(); } else { col = new FMSC.Controls.EditableComboBoxColumn() { DisplayMember = "Code" //((EditableComboBoxColumn)col).ValueMember = "Code"; }; } break; } case "SampleGroup": { col = new FMSC.Controls.EditableComboBoxColumn() { DisplayMember = "Code" //((EditableComboBoxColumn)col).ValueMember = "Code"; }; break; } case "KPI": { col = MakeColumn(field.ColumnType); //col.ReadOnly = true; break; } case "Initials": { col = new FMSC.Controls.EditableComboBoxColumn() { DisplayMember = "Initials", ValueMember = "Initials" }; break; } default: //all other columns { col = MakeColumn(field.ColumnType); break; } } // Set up width: autowidth or fixed width if (field.Width == 0.0) { col.Width = MeasureTextWidth(grid, field.Heading.Trim()) + 18;//plus 18 to allow for padding } else { int width1 = (int)field.Width; if (width1 <= 10) { int width2 = (charWidth * width1) + 18; col.Width = Math.Min(screenWidth, width2); } else { col.Width = Math.Min(screenWidth, width1); } } if (String.IsNullOrEmpty(col.MappingName)) //see if we have already set the Mapping Name { col.MappingName = field.Field; } if (String.IsNullOrEmpty(col.HeaderText)) { col.HeaderText = field.Heading; } if (string.IsNullOrEmpty(col.Format)) { col.Format = field.Format; // 'C' = currency, 'N' = number (E.G. "N1" means one decimal place), #0.00 } col.FormatInfo = null; //this.myCustomColumnBase.Width = (int)myTreeFieldSetups[i].Width; col.NullText = String.Empty;// <- look into this // Add the column style to the table style tblStyle.GridColumnStyles.Add(col); } DataGridButtonColumn logsCol = new DataGridButtonColumn(); logsCol.HeaderText = "Logs"; logsCol.MappingName = "LogCountActual"; logsCol.Width = MeasureTextWidth(grid, logsCol.HeaderText) + 18;//plus 18 to allow for padding tblStyle.GridColumnStyles.Add(logsCol); tblStyle.GridColumnStyles.Add(MakeErrorColumn(screenWidth)); // Add the newly created DataGridTableStyle to the grid. grid.TableStyles.Add(tblStyle); return(tblStyle); }