Это делается довольно просто. Но не так, как ты думаешь.
У ДатаГрида нет возможности вывести комбобокс в поле. Его ты должен вывести сам. КАК:
1. Добавляем элемент управления КомбоБокс. Свойству Visible = False.
2. При наступлении события активации нужной тебе ячейки (щелчке мыши, нажатии Enter и др) берем координаты этой ячейки: .Columns.Item(Номер колонки, в которой находится ячейка).Left и Rows.Item(Номер строки).Top, а также размеры .Width и .Height.
3. Пишем следующее: ComboBox1.Left = координата .Left ячейки, .Top = Координата .Top и т.д. После этого свойству .Visible комбобокса присваиваем True. Не забудь обработать событие потери фокуса ячейкой и убрать из нее комбобокс, а также отследить событие прокрутки таблицы. Попробуй разобраться сам.
4. В комбобоксе можешь вывести все что необходимо, после потери фокуса ячейкой записываем в нее значение, выбранное в комбобоксе. Все.
Все проверено и все возможно, но есть один маленький трабл: У комбобокса есть такая фича: у него есть жестко фиксированная минимальная высота, и она довольно большая, так что скорее всего тебе придется увеличить высоту строк в ДатаГриде. Другим вариантом является временное увеличение высоты строки, в которой сейчас производится редактирование. Если этого не сделать, то комбобокс будет заходить на соседнюю строку.
PS Проще всего чтобы не морочить головку над изменением положения комбобокса в момент прокрутки считать, что если пользователь крутит таблицу, то он закончил редактирование ячейки, т.е. убрать комбобокс.
Все.
Ответить
|