Hi ...
I am using the (EditingControlShowing) event to Enable AutoComplete in DataGridViewComboBox Column.
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewComboBoxEditingControl)
{
ComboBox combo = (ComboBox)e.Control;
((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown;
((ComboBox)e.Control).AutoCompleteSource = AutoCompleteSource.ListItems;
((ComboBox)e.Control).AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
}
}
but it has a strange behavior , when I type some characters then I leave the cell (Tab or right key) , the value did not change .
But if I repeat that, the value will change.
I attached the source code and (EXE) video to explain the problem.
could you please help me to make it works correctly .
thanks in advanced.
Loading
HoussamPosted Aug 31, 2012, 4:41 PM
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewComboBoxEditingControl)
{
ComboBox combo = (ComboBox)e.Control;
((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown;
((ComboBox)e.Control).AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
((ComboBox)e.Control).AutoCompleteSource = AutoCompleteSource.ListItems;
combo.Validated -= new EventHandler(combo_Validated);
combo.Validated += new EventHandler(combo_Validated);
}
}
public static object GetPropValue(object src, string propName)
{
if (src == null)
return null;
return src.GetType().GetProperty(propName).GetValue(src, null);
}
void combo_Validated(object sender, EventArgs e)
{
Object selectedItem = ((ComboBox)sender).SelectedItem;
DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn)dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex];
if (!String.IsNullOrEmpty(col.ValueMember))
dataGridView1.CurrentCell.Value = GetPropValue(selectedItem, col.ValueMember);
else
dataGridView1.CurrentCell.Value = selectedItem;
}