Особенности работы с ComboBoxColumn в DataGridView

Имеем DataGridView связанный с некоторой таблицей. Необходимо создать в нем колонку выпадающих списков ComboBox, элементы которых будут заполняться из другой таблицы, содержащий тексты элементов комбокса и коды. Во время работы нам надо получить выбранной код для каждой строки.

Делается это несложным, но крайне неочевидным способом. В таблице-источнике данных для датагрида нам надо добавить столбец для выбранного кода. Для столбца с комобоксами типа DataGridViewComboBoxColumn нам нам надо указать источником данных таблицу-справочник, а в свойство DataPropertyName занести столбец для выбранного кода из таблицы-источника данных для всего DataGridView. После чего выбранные данные будут автоматически транслироваться в таблицу-источник данных для даатагрида через механизм привязки. Чтобы у вас голова окончательно не пошла кругом я заготовил небольшую схему (BindingSource посредники на ней опущены):

DataGridViewComboBoxColumn

Принципиально важно установить один и тот же тип данных для столбца с кодом в обеих DataTable - иначе получим ошибку System.FormatException: DataGridViewComboBoxCell value is not valid.

В коде это может выглядеть примерно так:

comboBoxColSource.DataSource = someDataSet.someDataTable;
DataGridViewComboBoxColumn comboBoxColumn = (DataGridViewComboBoxColumn) someDataGridView.Columns["COMBO_BOX"];
comboBoxColumn.ValueMember = "KOD_SOMETH";
comboBoxColumn.DisplayMember = "TEXT_SOMETH";
comboBoxColumn.DataSource = comboBoxColSource;
// столбец в источнике данных для DataGridView
comboBoxColumn.DataPropertyName = "KOD_SOMETH";

Когда все заработает вы столкнетесь с еще одной проблемой - для открытия выпадающего списка надо кликнуть по нему несколько раз. Это глюк. Наиболее простой способ лечения (найден на английском сайте Codelicious) - установить свойству DataGridView EditMode значение EditOnEnter. Правда это вызовет другой глюк - не получится удалить строку выбрав ее кликом по ячейке-заголовку, так как данные об удалении будут пересланы отдельной ячейке, исправить это можно следующим способом.

Вы думаете это все? Значит вы действительно новичок. )) Скорее всего вы столкнетесь с тем, что длина элементов выпадающего списка гораздо большие ширины столбца в гриде. Причем расширять столбец грида нежелательно. Два очевидных решения - сделать всплывающую подсказку или увеличить ширину самого выпадающего списка. Я в свое время выбрал второе.


Комментарии

Особенности работы с ComboBoxColumn в DataGridView — Комментарии (9)

  1. ..Когда все заработает вы столкнетесь с еще одной проблемой - для открытия выпадающего списка надо кликнуть по нему несколько раз. Это глюк. Наиболее простой способ лечения (найден на английском сайте Codelicious) - установить свойству DataGridView EditMode значение EditOnEnter..
    - Не пройдет. При щелчке по ячейке появляется значение из списка, но НЕ заносится в ячейку, пропадает если сразу перейти на другую ячейку...

  2. На нынешний день выбор любой аппаратуры полагается постигаться скоропостижно и отменно, собственно есть действовать на выигрышных положении, именно по уместной цене и отличном хорошем уходе. Указанная компания климатической системы подает обеспечение циркулирующей системой надобное комнате особенно на таких обстоятельствах. Организация Мастер-Климат в окрестностях Киеве купить канальный кондиционер создает сбыт, снабжение, подключение, наладку, демонтаж, чистку также диагностику приобретенной климатизерной оборудовании в недорогим ценами и утверждение надежности. У презентованном серверном-сайте Мастер Климат покупатель получает назначение определить лучшую продукт европейских также японских поставщиков Panasonic, НеоКлима, Купер Хантер, Mitsubishi, Olma, Leberg, что можно заказать по Киеве за вразумительным расценкам. Мастер Климат применяет отпуск снабжения вентиляций и подогрева, какие подсобит предоставить нормальный атмосферу, устроенность к тому же нескончаемую функционирование на долгие годы употребления. Звоните до Мастер Климат, тогда мы подбираем к клиенту избранные разновидности полностью на выгодных условиях.

  3. Кондиционерные аппараты также вентиляционные установки собственно за умеренными стоимостью в Одессе пользователи сможете обозреть также заказать в онлайн- точке климатологической технического оснащения Мастер Климат master-climat.com/pages/montazh. На источнике точки клиент имеют возможность просмотреть кондиционерное оборудование производителя Тошиба, Панасоник, Neoclima, Купер Хантер, Карриер, Daikin, Chigo, LG и иные, или же к тому же оформить вентиляционный блок плюс бесплатную снабжение у Одессе. К привоза компания выполняем сервис монтировки, демонтирование, проверки плюс уборка канальных двухблочные- концепция и производтсвенных установок. обновляйте кондиционеры любой работоспособности также разновидности также низкие расценки в магазине Мастер Климат, ну а работающие монтажники выдают первоклассное сервис на счет монтировки приобретенного климатизерного установок. Промышляя собственно на бирже длительное период, фирма одержала желанное признание посредь абонентов, сертификаты гарантии свойств, авторизацию также права утвержденного производителя, все это дает компании возможность вести доставку считаясь любые просьбы клиентов.

  4. Уважаемый товарищ! Вы просто гений. Три дня бьюсь над этой проблемой, и вдруг, пожалуйста, готовое и очень красивое решение. Огромное спасибо!!!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>