//
// Author:
// Pedro MartÃnez Juliá <pedromj@gmail.com>
+// Ivan N. Zlatev <contact@i-nz.net>
//
private bool sorted;
private string valueMember;
- private DataGridViewComboBoxEditingControl editingControl;
-
public DataGridViewComboBoxCell () : base() {
autoComplete = true;
dataSource = null;
[Browsable (false)]
public virtual ObjectCollection Items {
- get { return items; }
+ get {
+ items.Clear ();
+
+ if (DataGridView != null && DataGridView.BindingContext != null &&
+ DataGridView.DataSource != null) {
+ CurrencyManager manager = DataGridView.BindingContext[DataGridView.DataSource] as CurrencyManager;
+ if (manager != null) {
+ items.AddRange (manager.List);
+ }
+
+ }
+
+ return items;
+ }
}
[DefaultValue (8)]
cell.autoComplete = this.autoComplete;
cell.dataSource = this.dataSource;
cell.displayStyle = this.displayStyle;
+ cell.displayMember = this.displayMember;
+ cell.valueMember = this.valueMember;
cell.displayStyleForCurrentCellOnly = this.displayStyleForCurrentCellOnly;
cell.dropDownWidth = this.dropDownWidth;
cell.flatStyle = this.flatStyle;
public override void InitializeEditingControl (int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) {
base.InitializeEditingControl (rowIndex, initialFormattedValue, dataGridViewCellStyle);
- editingControl = DataGridView.EditingControl as DataGridViewComboBoxEditingControl;
-
- if (editingControl == null)
- return;
-
- string text = initialFormattedValue == null ? string.Empty : initialFormattedValue.ToString ();
-
- // A simple way to check if the control has
- // been initialized already.
- if (editingControl.Items.Count > 0) {
- editingControl.SelectedIndex = editingControl.FindString (text);
- return;
- }
+ ComboBox editingControl = DataGridView.EditingControl as ComboBox;
editingControl.DropDownStyle = ComboBoxStyle.DropDownList;
- editingControl.Items.AddRange (this.Items);
-
- editingControl.Sorted = sorted;
- editingControl.SelectedIndex = editingControl.FindString (text);
-
- editingControl.SelectedIndexChanged += new EventHandler (editingControl_SelectedIndexChanged);
- }
-
- void editingControl_SelectedIndexChanged (object sender, EventArgs e)
- {
- Value = editingControl.SelectedItem;
+ editingControl.Sorted = Sorted;
+ editingControl.DataSource = null;
+ editingControl.ValueMember = null;
+ editingControl.DisplayMember = null;
+ editingControl.Items.Clear();
+ editingControl.SelectedIndex = -1;
+
+ if (DataGridView.DataSource != null) {
+ editingControl.DataSource = DataGridView.DataSource;
+ editingControl.ValueMember = ValueMember;
+ editingControl.DisplayMember = DisplayMember;
+ } else {
+ editingControl.Items.AddRange (this.Items);
+ }
}
public override bool KeyEntersEditMode (KeyEventArgs e)