Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как правильно прибиндить к форме ОБъект

60K
07 мая 2010 года
alexey_baranov
2 / / 07.05.2010
Привет!

Например есть простой класс

 
Код:
class Client{
    public string Name;
    public string Phone;
}


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

В идеале я хочу получить что-то такое.

 
Код:
var form= new ClientForm;
form.client= client1;   //это клиент которого я буду править
if (form.showDialog() == DialogResult.OK){
   //тут свойства объекта client1 уже изменены согласно данным из формы
   //что-то там делаю...
}
else{
    //тут свойства объекта client1 как были до вызова формы,
    //потому что пользователь передумал сохранять изменения и нажал кнопку "Отмена"
}


Я нашел в инете очень мало статей и еще меньше книг про это. В самой лучшей статье сказано сделать класс Client источником данных через меню "Данные / Показать источники данных" и потом перетащить его на форму. Все работает. Свойства объекта меняются через элементы управления. Все класно. Однако, что если я в форме нажал кнопку "Отменить"? Как заставить форму автоматически вернуть свойства объекта в начальное состояние, как было до появления формы?

Дайте ссылку на книгу и хотя бы большую стать, где детально расписан датабиндинг в WinForms .NET 3.5

Спасибо.
9.0K
30 сентября 2010 года
t-34
129 / / 30.11.2007
1. Чтобы работало, Client должен реализовывать интерфейс IPropertyChanged. Соответственно, поля Name {get;set;}
2. На форме есть контрол, например, EditBox. Вот так к нему можно забаиндить объект (желательно делать в конструкторе формы после инициализации всех контролов или на событии OnLoad):
 
Код:
Client client = new Client(){Name = "somename", Phone = "911" };
....
BindControlsWithObjects()
{
string objectProperty = "Name"; #баиндим поле Name объекла client
string controlProperty = "Text"; #на поле Text контрола EditBox
nameEditboxControl.DataBindings.Add(controlProperty, client, objectProperty, true, DataSourceUpdateMode.OnPropertyChanged);
...
#так же байндим остальные поля объекта
}
60K
30 сентября 2010 года
alexey_baranov
2 / / 07.05.2010
Ух ты ответил хоть кто-то!

А что к примеру если я захочу поменять свойство Name на FullName? Рефакторинг по F2 не будет же работать со строковой переменной objectProperty или будет? Если не будет, я получу ошибки во время выполнения. Как с этим быть?
9.0K
30 сентября 2010 года
t-34
129 / / 30.11.2007
Цитата:
А что к примеру если я захочу поменять свойство Name на FullName? Рефакторинг по F2 не будет же работать со строковой переменной objectProperty или будет? Если не будет, я получу ошибки во время выполнения. Как с этим быть?


Не меняйте свойство Name на FullName.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог