| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > ListView c ComboBox |
| Автор: Fighter 26.3.2008, 22:07 |
| Есть ли где в Microsoft Visual Studio 2005 какой-нибудь компонент списка, наподобие стандартного ListView, только нужна возможность установки на какую-нибудь колонку comboBox. Например, пользователь добавляет строку в этот ListView, а значение столбца он выбирает из списка comboBox, который появляется на месте этой ячейки. |
| Автор: vponomarov 27.3.2008, 00:29 |
| Fighter, неа, нет такого компонента. придется писать самому как вариант, можно использовать DataGridView |
| Автор: VisualProgrammerNET 27.3.2008, 00:32 |
| Как мне кажется, юзабилити подобного интерфейса будет плохим (хотя, я не знаю конкретного проекта, в котором подобное решение применяется). Всё же может стоит использовать два отдельных контрола? Сначала выбирать из списка, а потом уже добавлять в ListView? Хотя, как уже упоминал, в конкретном проекте это может быть и хуже =) |
| Автор: Fighter 27.3.2008, 04:58 |
| Объясняю данный конкретный случай. Вот есть книга Excel с учебным планом на специальность. И есть база данных Access с преподавателями. В листе Excel выделен отдельный столбец, который будет хранить id каждого преподавателя из базы. Юзабилити данного интерфейса будет как раз в самый раз, так как когда пользователь откроет окно, перед ним появится список (ListView) с уже выбранными предметами с книги Excel. Пользователю нужно будет только к каждому предмету проставить преподавателя. И естественно, удобнее, когда кликаешь, появляется поле ввода со списком, из которого можно выбрать необходимый элемент. А так, есть контрол iGrid for .NET, только он около 300 баксов стоит, так что мне не подойдет (у меня тока дипломный проект). Но, несмотря на это, я понял как сделать это вручную, я тестовый пример уже сделал (не до конца правда), осталось это все применить на практике. |
| Автор: vponomarov 27.3.2008, 10:37 |
| Fighter, а зачем мучаться с листВью? как раз для таких проектов датагрид подхоит отлично! |
| Автор: vponomarov 27.3.2008, 21:40 |
| Fighter, не, ну дело конечно твое, только не вижу как связано использование датагрида с акцесом его можно с легкостью применять в любых ситуациях: в дизайнере задал тип и описалово столбцов, а потом просто добавляешь сточки как тебе удобно хотя может я чет неправильно понял |
| Автор: Fighter 27.3.2008, 22:31 |
| Ну хорошо, а в дата грид можно сделать так, чтобы в отдельных столбцах вместо обычного текста появлялся comboBox? Если так можно, тогда естественно надо использовать датагрид, если тупо обычные строчки, то я уже понял как делать. |
| Автор: vponomarov 28.3.2008, 00:55 | ||
конечно можно, я об этом и пытаюсь сказать |
| Автор: Fighter 28.3.2008, 01:34 |
Хорошо. Вот это уже интересно. А можешь рассказать, как это делается? |
| Автор: vponomarov 28.3.2008, 10:29 | ||
так там все предельно просто: после того как настроил типы и названия колонок пишешь:
|
| Автор: Fighter 28.3.2008, 10:56 |
| Классно. Чесслово не знал. Ну а как теперь обратиться к столбцу, в котором есть компобокс и в этот компобокс напихать значений. Из вышеприведенного кода пока что ничего не понял. |
| Автор: vponomarov 28.3.2008, 11:04 | ||
Fighter, читай внимательнее
короче все как с обычным комбобоксом |
| Автор: Plamenk 28.3.2008, 11:05 |
| http://www.codeproject.com/KB/list/XPTable.aspx |
| Автор: Fighter 28.3.2008, 15:18 | ||
Чё та ссылки не работают. Блин, компонент хороший, нужно тока качнуть. |
| Автор: Fighter 28.3.2008, 15:39 |
| Блин, не работают ссылки. Если кто может, выложите пожалуйста этот компонент в этой теме. |
| Автор: vponomarov 28.3.2008, 15:56 |
| Fighter, enjoy |
| Автор: VisualProgrammerNET 28.3.2008, 16:06 | ||
ты до сих пор не зарегистрирован на КодеПрожехт? =) |
| Автор: Fighter 28.3.2008, 18:56 |
| Файлы скачал, но, извините, может быть за тупость. Но эти компоненты не совсем работают. Дело в том, что когда саздаешь модель таблицы и выходишь из конструктора. Потом опять заходишь в конструктор моделей таблицы и он пишет что он что-то там сделал с label и поэтому зайти не может. После сохранения и перезагрузки он опять заходит в конструктор, но если опять выйти из конструктора, то до следующей перезагрузки и не дойдет. Это первая беда, а вторая, это то, как устанавливать эти типы столбцов. Лично для своей проблемы, я уже сделал, чтобы комбобокс появлялся, единственное, это нужно отследить собитие скрола. А причин скрола может быть несколько, как нажатие мышкой на одну из кнопкок полосок, или MouseWheel. Тока именно этих событий я не видел. Пока что я далеко не зашел, объясните как работать с XPTable, или если там слишком геморно - тогда объясните как перехватить это событие скрола. Оно необходимо для изменения положения комбобокса. |
| Автор: Fighter 29.3.2008, 12:55 |
| Спасибо, разобрался я все-таки с дата-гридом. Возможно я не умею устанавливать .NET компоненты, но этот же XPTable работает не полностью. И еще на codeproject я нашел штук 5 таких листвью, и ни один не стал работать. Вот тогда после этого я повнимательнее поизучал DataGridView и у меня все получилось. Единственное, возник вопрос с дата гридом. Вот, я создал DataGridComboBoxColumn, и у этой ComboBoxColumn есть свойство DataSource и DataMember. Впринципе, я могу заполнять эти комбобоксы сам, но было бы удобнее, чтобы записи этих комбобоксов брались бы из базы данных. Т.е. у меня есть таблица id_Prepod PrepodFIO 1 Иванов И.И. 2 Петров П.П. Вот, и нужно, чтобы когда я добавил новую строчку в DataGridView, чтобы в колонке, в которой находится ComboBoxColumn, элементы ComboBox'а были бы записи из базы данных, и естественно, чтобы заполнялись элементы полем PrepodFIO, но в то же время, чтобы я мог узнать, какую именно запись выбрали, т.е. получить id_Prepod. |