![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Прочитал статью на RSDN Привязка данных в Windows Forms.
Привязка единичного объекта к контролам отлично сработала. А вот привязка к объекту из списка не работает. Делаю так, для пробы только для txbFIO:
После btnAddNew_Click и выбора с lsbPeoples (это ListBox на форме) элемента, все контролы показывают правильные данные, а txbFIO - пустой. В чем проблема, никак не пойму? -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
Felan, в том, что у типа List<Men> нет свойства FullName
-------------------- СУВ, Partizan. |
|||
|
||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Это свойство есть у класса Men.
Класс Men выглядит так:
Это сообщение отредактировал(а) Felan - 21.4.2009, 11:08 -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Может быть дело в том, что FullName - ReadOnly свойство. Всё-таки привязка должна быть двусторонней.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
Felan, Дык binding идёт с объектом типа List<Men>, а не с объектом типа Men...разницу чувствуете? -------------------- СУВ, Partizan. |
|||
|
||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Разницу я чувствую.
Я даже ссылку на статью привел, в которой описан этот метод привязки данных... (Пункт 3.2) И даже в MSDN про него написано... Вот я только не чувствую, что я не так сделал, и почему, в статье и MSDN говорится, что это должно работать, а у меня не работает. Вполне возможно, что я действительно страшно ступил Добавлено @ 12:20
Попробую дома какой-нибудь сеттер к нему сделать, хотя странно как-то. Привязка же не обязательно двусторонней должна быть... вроде... Ну и я бы понял, если бы оно в таком случае не писалось, но почему не читается то... Это сообщение отредактировал(а) Felan - 21.4.2009, 12:34 -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| -Mikle- |
|
||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
Felan, я не стал вникать в чем дело именно у тебя в коде, а просто покажу другой, рабочий вариант.
Еще у тебя есть бесполезный код связанный с использованием List<> (это dataBind() и lsbPeoples_SelectedIndexChanged()). Вместо этого лучше использовать BindingList<>. Также, рекомендую реализовать интерфейс INotifyPropertyChanged в классе Men. Вобщем вот код, смотри: класс Men
код формы
-------------------- Если тебе плюют в спину, значит ты впереди... |
||||
|
|||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Сделал по твоему примеру. Все работает. Даже не пришлось реализовывать INotifyPropertyChanged. У меня нет вариантов, когда источник меняется не через модель.
В принципе я свою проблему решил Но тему закрывать не буду, т.к. хотелось бы все таки выяснить, что не так было в изначальном варианте... ну для понимания сути проблемы... -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
Прикрепи проект с ошибкой из первого поста сюда, мне будет проще найти ошибку...
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Проект приложил.
Еще там один вопрос в комментарии написал, в форме MenFrm, по привязке даты к контролу. Кстати, не до оценил всю глубину этой привязки. Уже когда сделал по твоему. Получается что все равно надо реализовывать INotifyPropertyChanged, иначе при закрытии диалога не обновляются данные на основной форме... Если его сделать (тут еще есть вопросы по поводу вложенного класса Address, но это завтра наверно поковыряюсь сам...) то данные обновляются сразу. Но при этом не работает кнопка "отмена". Я переделал обновление источника на "при валидации" и сделал ей causeValidation = false. С отменой нормально все, а вот при принятии, обновление происходит сразу при нажатии на кнопку. Т.е. если например нажать на кнопку и не отпуская клавиши мыши убрать курсор, то вроде как бы и не было нажатия, а данные обновились. Можно это как-то обойти? Присоединённый файл ( Кол-во скачиваний: 4 )
Task1_WinForms.zip 268,21 Kb-------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Посмотрел проект, и вот на вопрос
Отвечаю Раскоментируй строку
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: нет Всего: 7 |
Если бы еще ты полностью и внимательно прочитал вопрос, то заметил бы, что речь идет о биндинге списка к полю контрола, а не о том, как присвоить полю контрола данные. Я даже статью привел, в которой описанный способ освещен. Так что ответ мимо тазика :( -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
В строке 68 в первом посте ты присваиваешь номер позиции. Новый номер почему-то не присваивается(всё время равен -1). У меня сейчас пока нет времени разбираться в чём дело, может потом, или сам.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 8 Всего: 59 |
Ответ зарыт в недрах реализации биндинга.
Предполагаю следующее: Весь косяк из-за List, точнее из-за отсутствия у него события о его изменении. То есть, когда ты биндишь к TextBox'у список, он пустой в этот момент и биндинг "ничего не делает". После добавления в список нового объекта, биндинг TextBox'а по прежнему ничего не делает, так как не знает, что в списке появился новый элемент. Если, к примеру, добавить один элимент в список до привзяки, то все начинает работать волшебным образом. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
-Mikle-, в смысле привязку надо выполнять после того, как все элементы добавлены?
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |