class Client{
public string Name;
public string Phone;
}
Как правильно прибиндить к форме ОБъект
Например есть простой класс
Код:
и предположим я хочу теперь создать форму, через которую пользователь будет менять свойства этого объекта. В этом и вопрос как это правильно сделать?
В идеале я хочу получить что-то такое.
Код:
var form= new ClientForm;
form.client= client1; //это клиент которого я буду править
if (form.showDialog() == DialogResult.OK){
//тут свойства объекта client1 уже изменены согласно данным из формы
//что-то там делаю...
}
else{
//тут свойства объекта client1 как были до вызова формы,
//потому что пользователь передумал сохранять изменения и нажал кнопку "Отмена"
}
form.client= client1; //это клиент которого я буду править
if (form.showDialog() == DialogResult.OK){
//тут свойства объекта client1 уже изменены согласно данным из формы
//что-то там делаю...
}
else{
//тут свойства объекта client1 как были до вызова формы,
//потому что пользователь передумал сохранять изменения и нажал кнопку "Отмена"
}
Я нашел в инете очень мало статей и еще меньше книг про это. В самой лучшей статье сказано сделать класс Client источником данных через меню "Данные / Показать источники данных" и потом перетащить его на форму. Все работает. Свойства объекта меняются через элементы управления. Все класно. Однако, что если я в форме нажал кнопку "Отменить"? Как заставить форму автоматически вернуть свойства объекта в начальное состояние, как было до появления формы?
Дайте ссылку на книгу и хотя бы большую стать, где детально расписан датабиндинг в WinForms .NET 3.5
Спасибо.
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);
...
#так же байндим остальные поля объекта
}
....
BindControlsWithObjects()
{
string objectProperty = "Name"; #баиндим поле Name объекла client
string controlProperty = "Text"; #на поле Text контрола EditBox
nameEditboxControl.DataBindings.Add(controlProperty, client, objectProperty, true, DataSourceUpdateMode.OnPropertyChanged);
...
#так же байндим остальные поля объекта
}
А что к примеру если я захочу поменять свойство Name на FullName? Рефакторинг по F2 не будет же работать со строковой переменной objectProperty или будет? Если не будет, я получу ошибки во время выполнения. Как с этим быть?
Цитата:
А что к примеру если я захочу поменять свойство Name на FullName? Рефакторинг по F2 не будет же работать со строковой переменной objectProperty или будет? Если не будет, я получу ошибки во время выполнения. Как с этим быть?
Не меняйте свойство Name на FullName.