C# – Textbox Autocomplete in a DataGridView Winform

cdatagridviewnetwinforms

I've got my DataGridView binding correctly to my datatable however I'm trying to get autocomplete to work correctly for one of the textbox columns. The autocomplete is working but I'm trying to restrict it to only one column on the datagridview. At the moment it either does it for every column, or nothing at all. Any ideas? Code below.

private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (dataGridDetail.CurrentCell.ColumnIndex == 2)
        {
            var source = new AutoCompleteStringCollection();
            String[] stringArray = Array.ConvertAll<DataRow, String>(products.Select(), delegate(DataRow row) { return (String)row["code"]; });
            source.AddRange(stringArray);

            TextBox prodCode = e.Control as TextBox;
            if (prodCode != null)
            {
                prodCode.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                prodCode.AutoCompleteCustomSource = source;
                prodCode.AutoCompleteSource = AutoCompleteSource.CustomSource;

            }
        }
    }

Best Answer

try to release the prodCode.AutoCompleteCustomSource, if it is not the correct column:

private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (dataGridDetail.CurrentCell.ColumnIndex == 2)
    {
        var source = new AutoCompleteStringCollection();
        String[] stringArray = Array.ConvertAll<DataRow, String>(products.Select(), delegate(DataRow row) { return (String)row["code"]; });
        source.AddRange(stringArray);

        TextBox prodCode = e.Control as TextBox;
        if (prodCode != null)
        {
            prodCode.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            prodCode.AutoCompleteCustomSource = source;
            prodCode.AutoCompleteSource = AutoCompleteSource.CustomSource;

        }
    }else
          prodCode.AutoCompleteCustomSource = null;
}
Related Topic