using System; using System.ComponentModel; using System.Windows.Forms; namespace DPumpHydr.WinFrmUI.WenSkin.Controls { public class WenDataGridViewComboBoxCell : DataGridViewTextBoxCell { public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) { base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); if (this.OwningColumn is WenDataGridViewComboBoxColumn column) if (DataGridView.EditingControl is WenDataGridViewComboBoxCellEdit edit) { edit.Text = this.Value?.ToString(); edit.Items.Clear(); edit.Items.AddRange(column.Items.ToArray()); } } public override Type ValueType => typeof(string); public override Type EditType => typeof(WenDataGridViewComboBoxCellEdit); public override object DefaultNewRowValue => ""; class WenDataGridViewComboBoxCellEdit : WenComboBox, IDataGridViewEditingControl { public DataGridView EditingControlDataGridView { get; set; } public object EditingControlFormattedValue { get => this.Text; set { if (value is string v) this.Text = v; else this.Text = ""; } } public int EditingControlRowIndex { get; set; } public bool EditingControlValueChanged { get; set; } public Cursor EditingPanelCursor => base.Cursor; public bool RepositionEditingControlOnValueChange => false; public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle) { this.Font = dataGridViewCellStyle.Font; this.ForeColor = dataGridViewCellStyle.ForeColor; this.BackColor = dataGridViewCellStyle.BackColor; } public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey) { return dataGridViewWantsInputKey; } public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context) { return EditingControlFormattedValue; } public void PrepareEditingControlForEdit(bool selectAll) { } protected override void OnTextChanged(EventArgs e) { base.OnTextChanged(e); EditingControlValueChanged = true; this.EditingControlDataGridView.NotifyCurrentCellDirty(true); } } } }