Автозаполнение текстового поля в форме данных WinGridView - PullRequest
1 голос
/ 29 августа 2011

У меня правильно привязка DataGridView к данным, однако я пытаюсь заставить автозаполнение работать правильно для одного из столбцов текстового поля.Автозаполнение работает, но я пытаюсь ограничить его только одним столбцом в сетке данных.На данный момент он либо делает это для каждого столбца, либо вообще ничего.Есть идеи?Код ниже.

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;

            }
        }
    }

Ответы [ 3 ]

5 голосов
/ 02 февраля 2012

попробуйте освободить prodCode.AutoCompleteCustomSource, если это не правильный столбец:

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;
}
2 голосов
/ 29 августа 2011

Ваше условие if просто проверяет, выбрал ли пользователь третий столбец.

Хотите ли вы сделать этот столбец редактируемым?или только одна ячейка в выбранной строке?Как редактирование вызвано другой кнопкой на форме?В этом случае, когда редактирование становится активным, можно выбрать любую ячейку?

Вам нужно будет проиндексировать правильный столбец и установить для него автозаполнение.

1 голос
/ 03 августа 2015

Abuleen предложение является лучшим!Я сделал небольшое улучшение, потому что строка в операторе else будет выдавать error типа Переменная не существует в текущем контексте

Следовательноего код:

private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if(dataGridDetail.EditingControl.GetType()==typeof(DataGridViewTextBoxEditingControl))
    {     
      TextBox prodCode = e.Control as TextBox;         
      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; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...