Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataGridViewComboBoxColumn ввод текста с клавы, как совместить combobox и textbox 
:(
    Опции темы
swetik1981
Дата 10.11.2011, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 20.12.2007

Репутация: нет
Всего: нет



Имеется datatable (dt), которая отображена в datagridview (dgv)
К dgv добавлен DataGridViewComboBoxColumn (cbc), связанный с одним из столбцов dt.
Как сделать, чтобы пользователь в случае отсутствия нужных значений в выпадающем списке мог осуществить ввод нового значения в ячейку с клавиатуры?

PM MAIL   Вверх
diadiavova
Дата 10.11.2011, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Честно говоря, встроенных способов добиться этого не предусмотрено. Видимо связано это с тем, что комбобоксстолбец предназначен для случаев, когда количество значений ограничено. Можно обойти это ограничение, к примеру просто создать окошко, с помощью которого можно будет редактировать список и запускать его по необходимости. Мне кажется, что это самый оптимальный путь. Если это не подходит и надо непременно делать это прямо в самом комбобоксе, то можно с этим самым комбобоксом и пошаманить. Выловить его можно при помощи события грида EditingControlShowing примерно следующим образом
Код

    Private Sub DataGridView1_EditingControlShowing(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
        If TypeOf e.Control Is ComboBox Then
            columnCombobox = CType(e.Control, ComboBox)
            ' columnCombobox.DropDownStyle = ComboBoxStyle.DropDown
        End If

    End Sub

    Dim WithEvents columnCombobox As ComboBox
Дальше можно настраивать его свойства(как в закомментированном коде) или обрабатывать события. Таким образом можно реализовать любое поведение.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
swetik1981
Дата 10.11.2011, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 20.12.2007

Репутация: нет
Всего: нет



Проблема в том, что новое значение вводится в ячейку за счёт columnCombobox.DropDownStyle = ComboBoxStyle.DropDown, но пропадает сразу после выхода из неё. Такое ощущение, что комбоячейка разрешает вводить только те значения, которыек присутствуют в списке комбобокса. Как это обойти?
PM MAIL   Вверх
diadiavova
Дата 10.11.2011, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(swetik1981 @  10.11.2011,  20:57 Найти цитируемый пост)
Как это обойти? 

Ну видимо отлавливать события изменения видимости и текста и в обработчиках вносить вновь введенное значение в список. Ну то есть, при изменении текста, вносить его в какую-нибудь переменную, а как только комбобокс становится невидимым - содержимое этой переменной вносить в список значений комбобокса. Ну это примерный сценарий конечно, там видимо повозиться все таки придется, но вариант вполне рабочий. Хотя я бы скорей сделал окошко для добавления новых значений и не парился бы.

Добавлено через 2 минуты и 38 секунд
Нет, наверно не за видимостью надо следить, а за фокусом. Как только фокус исчезнет, добавлять значение. Ну что-то в этом роде


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
diadiavova
Дата 10.11.2011, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Вот очень приблизительный набросок. Там особо не проверял, так что в каких-то случаях и заглючить может, но идея должна быть понятна.

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  dgvComboboxNewItem.rar 66,22 Kb


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.